Java 简单单线程 IllegalMonitorStateException

标签 java multithreading console wait notify

我在 Java 中遇到一个关于线程的问题,它涉及单线程以及停止线程并继续。

我的代码的作用:MainWindow 类创建一个 Threadreference,并在结束循环中启动和停止它。

MyThread 类启动线程。 run 方法非常短,它所做的就是: 1.将鼠标移动到屏幕左侧 然后 2.将鼠标移动到屏幕右侧

当我启动程序时,我立即收到 IllegalMonitorStateException 并且不知道如何修复它。

public class MainWindow
{
    public static void main(String[] args) throws Exception 
    {
        MyThread mt = new MyThread();
        while(true)
        {
            mt.start();
            Thread.sleep(1000);
            mt.wait();
        }
    }
}

public class MyThread implements Runnable 
{
    private Thread th;
    public MyThread() throws Exception
    {
        th = new Thread();
        th.start();
    }
    public void start() throws InterruptedException
    {
        synchronized(this){
        th.wait();
        }
    }
    public void wait()
    {
        synchronized(this){
        th.notifyAll();
        }
    }
    @Override
    public void run() 
    {
       //do something
    }
}

感谢您的帮助! :)

最佳答案

while(true)
        {
            mt.start();
            Thread.sleep(1000);
            mt.wait();
        }

您不应该使正在运行的线程可运行。即)您无法启动已经运行的线程。

关于Java 简单单线程 IllegalMonitorStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731692/

相关文章:

java - 如何在 Java 中创建带有连接按钮的 ButtonGroup?

java - 从 JBloomberg API 检索实时数据

c++ 11 - 实现 Promise 的示例程序不起作用

python - 禁用控制台窗口的关闭按钮

C# 关闭标准输出

java - Collections.sort 在 Java 中 Guava 的 Lists.transform 函数之后对列表进行排序时抛出 UnsupportedOperationException?

java - Java EE 应用程序中的 System.out.println 危害

asp.net - 检查线程是否仍在运行

java - 我们如何在 hibernate 中处理并发事务

asp.net - 显示用于登录 ASP Core 2 的控制台