在我的主程序中,我运行1个用户线程,其所有子节点都是守护程序线程。因此,当用户线程完成其工作时,所有守护程序线程也会终止。我在守护程序线程中执行一些代码块,必须在线程终止之前完成。
如果用户线程完成了工作,是否可以在守护程序线程中等待特定的块执行?
答案 0 :(得分:2)
您可以实现这种不同的方式
答案 1 :(得分:1)
首先,如果一个人确实需要一个线程运行的代码块来完成执行,那么该线程实际上并不是一个守护线程。
但是,要完成您的要求,您可以让主线程通过Thread#join()等待守护程序线程
答案 2 :(得分:1)
你看过CountDownLatch还是Cyclic Barrier?
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html
答案 3 :(得分:1)
我认为这取决于你真正想做的事情:
在关闭之前,您有一个相当独立的代码块。 解决方案:关闭挂钩
Runtime.getRuntime()。addShutdownHook(new Thread(){ public void run(){database.close(); } });
您希望优雅地关闭线程。解决方案:使用用户线程。中断他们阻止他们。使用其中一个指定的解决方案等待。
子弹1更详细:
它基于ReadWriteLock。
// Demon
Lock l = readWriteLock.getReadLock();
l.lock(); // Will wait here if WriteLock is requested
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
// User
Lock l = readWriteLock.getWriteLock();
l.lock(); // Will wait here until all readLock are unlocked
// no need to unlock. Dys anyway