【发布时间】:2013-01-13 13:44:27
【问题描述】:
我有一堆线程同时运行。有时一个线程需要通知其他线程等待它完成一个工作并再次发出信号让它们恢复。由于我对 Java 的同步有点陌生,我想知道做这种事情的正确方法是什么。我的代码是这样的:
private void Concurrent() {
if (shouldRun()) {
// notify threads to pause and wait for them
DoJob();
// resume threads
}
// Normal job...
}
更新:
请注意,我编写的代码在一个类中,每个线程都将执行该类。我无权访问这些线程或它们的运行方式。我只是在线程中。
更新 2:
我的代码来自爬虫类。爬虫类(crawler4j)知道如何处理并发。我唯一需要的是在运行一个函数之前暂停其他爬虫,然后再恢复它们。这段代码是我爬虫的基础:
public class TestCrawler extends WebCrawler {
private SingleThread()
{
//When this function is running, no other crawler should do anything
}
@Override
public void visit(Page page) {
if(SomeCriteria())
{
//make all other crawlers stop until I finish
SingleThread();
//let them resume
}
//Normal Stuff
}
}
【问题讨论】:
-
您是否考虑过改用
BlockingQueue? -
线程只能通过添加代码来停止。您无法安全地从外部停止/暂停线程。
标签: java multithreading synchronization