java - 按需唤醒 hibernate 线程

标签 java multithreading

我有一个仆人线程,只要我的主线程告诉它执行任务,我就想执行该任务。

这是我的仆人线程中的 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/

相关文章:

java - 在 Java 中使用/处理音频

java - 在 Android 中使用 OpenCV 进行实时纸张检测

java - Thread.sleep 暂停整个程序

java - 在 Java EE 7 应用程序中使用 ThreadPoolExecutor 的 Drools 导致重新部署时出现问题

multithreading - log4net - LogicalThreadContext - 和单元测试用例

java - Java,如何在单击按钮时在两个图像之间交替,然后在再次单击时停止?

java - 以给定的执行时间启动线程

java - 如何减少 Docker 中的 Spring Boot 应用程序内存使用量?

java - tomcat ssl客户端握手java错误

java - 在 Hibernate 中保存大型集合时出现 ConcurrentModificationException