我有一个仆人线程,只要我的主线程告诉它执行任务,我就想执行该任务。
这是我的仆人线程中的 run 方法:
public void run() {
while (true) {
System.out.println("Servant woke up.");
for (int i = 0; i < globalVariable; i++) {
System.out.println("Servant is working very hard.");
}
try {
System.out.println("Servant went to sleep.");
//I want servant to sleep until master wakes it up so I picked a big number
Thread.sleep(999999999);
} catch (InterruptedException e) {
System.out.println("Servant had a hard time falling asleep");
}
}
}
所以当我的主线程执行此操作时:
globalVariable = 10;
servant.interrupt();
我希望我的仆人说它醒了,工作了 10 倍,然后又睡着了,但现在它没有做任何事情,除了最初的“仆人醒了”之外,控制台上什么也没有打印。和“仆人去 sleep 了。”
(我对线程非常陌生,很抱歉,如果这是非常基本的)
最佳答案
您可能想看看 ReentrantLock
( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html )
这使您可以通过调用 newCondition()
方法创建一个Condition
( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html )。
此条件允许您的线程 await()
和 signal()
通知它们您的程序中发生了一些特殊情况。
关于java - 按需唤醒 hibernate 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802162/