我知道 Java 线程相关的问题已经被问过很多次,但我一直无法拼凑出我的问题的答案。我还是线程编程的新手,所以请原谅我的无知。
我不了解与一致性相关的问题,并且需要根据需要进行适当的同步。问题是关于在当前正在执行的线程中的对象上调用方法。考虑以下示例(这是实验性的,因此请原谅任何糟糕的设计选择):
- 我有一个 JSP 进行一些搜索并返回结果。响应必须在 10 秒内发送给用户(无论搜索是否能够完成)。
- JSP 创建一个 ThreadPoolExecutor 并使用它来启动一个搜索线程。
- 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() 方法有什么问题或风险吗?它似乎在低容量使用情况下工作正常,但如果有更高的容量,我会冒问题吗?
非常感谢任何帮助。谢谢!