【发布时间】:2013-04-23 18:10:13
【问题描述】:
我知道 Java 线程相关的问题已经被问过很多次了,但我一直无法拼凑出我的问题的答案。我还是线程编程的新手,所以请原谅我的无知。
我不了解与一致性相关的问题,需要根据需要进行适当的同步。问题是关于在当前正在执行的线程中的对象上调用方法。考虑以下示例(这是实验性的,请原谅任何糟糕的设计选择):
- 我有一个 JSP 执行一些搜索并返回结果。响应必须在 10 秒内发送给用户(无论搜索是否能够完成)。
- JSP 创建一个 ThreadPoolExecutor 并使用 is 来启动一个搜索线程。
- JSP 进入休眠状态 2 秒。
- JSP 唤醒并检查搜索线程是否有任何结果。搜索 obj 提供了一个 getCurrentResultsCount() 方法,该方法返回一个 int 计数的到目前为止找到的结果。
- 步骤 3 和 4 重复 5 次,然后向用户发送响应。搜索线程可以根据需要继续运行(完成后,结果将存储在 servlet 上下文或数据库中,以后可以访问)
我的代码如下所示:
ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
SearchWidget searchWidget = new SearchWidget(searchTerm);
Future<?> searchWidgetFuture = pool.submit(searchWidget);
Thread.sleep(2000);
System.out.println("1. Results so far:" + searchWidget.getCurrentResultsCount());
Thread.sleep(2000);
System.out.println("2. Results so far:" + searchWidget.getCurrentResultsCount());
Thread.sleep(2000);
System.out.println("3. Results so far:" + searchWidget.getCurrentResultsCount());
...
...
以我的方式调用 getCurrentResultsCount() 方法有什么问题或风险吗?它似乎在低容量使用情况下运行良好,但如果容量较高,我是否会冒问题?
非常感谢任何帮助。谢谢!
【问题讨论】:
标签: java multithreading synchronization threadpool threadpoolexecutor