java - java中一个线程的输入来自另一个线程的无限等待

标签 java multithreading infinite-loop hotkeys

我正在制作一个 Java 应用程序,它可以对热键组合执行某些操作。我有一个无限的 while 循环来等待 HotKey 输入关闭,但这使得应用程序非常耗费 CPU 时间。

以下是我的代码最简单的样子:

static boolean isOpen = true;
void main()
{
    ....
    add SomeHotKeyListener();
    ....
    while(isOpen)
    {  }
    releaseResources();
}

void onHotKey(int hotKeyIdentifier)
{
    if(hotKeyIdentifier == something)
      do something;
    if(hotKeyIdentifier == something)
      isOpen = false;
}

我需要一种多线程方法来实现这一点,或者如果有人有更好的方法可以适应。

最佳答案

我建议您阅读 Java 中的 synchronized 关键字。只是Google it ,你应该找到大量的例子和 tutorials .

这应该可以解决您的问题:

static boolean isOpen = true;
static Object lock = new Object();
void main()
{
    ....
    add SomeHotKeyListener();
    ....
    synchronized(lock)
    {
        while(isOpen)
        {
            try {
                lock.wait()
            } catch(InterruptedException e) {
            }
        }
    }
    releaseResources();
}

void onHotKey(int hotKeyIdentifier)
{
    if(hotKeyIdentifier == something)
        do something;
    if(hotKeyIdentifier == something)
    {
        synchronized(lock)
        {
            isOpen = false;
            lock.notify();
        }
    }
}

关于java - java中一个线程的输入来自另一个线程的无限等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398907/

相关文章:

java - 使用 Springs @Autowired 进行独立的 JUnit 测试

java - 一个线程可以直接让另一个线程等待吗?

python - 当 Popen 错误时,子进程的 Popen 关闭在另一个线程中使用的 stdout/stderr 文件描述符

C11 - 编译器忽略潜在的无限循环

检查非常非常长的字符串时发生 Java 堆空间错误

java - Eclipse 插件将描述添加到表/选项卡文件夹

c - 如何在 C 中按下按键退出 time_delay 循环?

c++ - C++中的cin缓冲区问题

java - Jackcess 列乱序?

c - 什么时候销毁 pthread 屏障是安全的?