我正在使用Java1.6的以下并发特性来离线执行一些任务。当通过注册创建用户时,我需要执行一些内部日志记录任务&我不想阻止该用户,因此我一直使用以下代码
java.util.concurrent.ExecutorService myservice = Executors.newSingleThreadExecutor();
myservice.execute(new myTask(user));在这里,我有一个内部类myTask,它实现了Runnable &在Run方法中,我正在做离线活动(从而使它成为一个非阻塞调用)。
现在,一旦用户登录到网站,点击某些动作(网页上的按钮)时,我需要进行类似的离线活动&我不想将调用作为阻塞调用。我在这个页面上有4个动作,我需要在上面执行离线任务。
是否可以在4个不同的内部类中使用类似的上述代码并在其中执行离线活动??如果不是,还有什么选择呢?
谢谢!
发布于 2012-01-03 11:17:24
如果您不希望有高级别的并发请求,则可以使用Executor。在本例中使用Thread pool。
如果您的应用程序是一个高并发的应用程序,并且您应该保证操作的处理(即使在jvm崩溃的情况下),并且希望操作是事务性的,那么消息传递(JMS)可能是解决方案。
我之前在一个web应用程序中成功地使用了带池的Executor。但是,不建议在web-app中创建线程,也不允许在EJB中创建线程,因为线程不是由容器管理的。
示例
static final int POOL_SIZE=10;
ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE);你也可以阅读这篇很好的文章:Java Concurrency
发布于 2012-01-03 11:21:54
除了线程池之外,您应该使用线程安全队列,以允许比可用线程更多的工作。
https://stackoverflow.com/questions/8707464
复制相似问题