多线程同步中wait()方法导致IllegalMonitorStateException异常的原因是什么?

多线程同步中wait()方法导致illegalmonitorstateexception异常的原因是什么?

多线程同步与wait()方法异常详解

本文分析一段旨在实现三个线程交替打印自身ID的代码,并解释其中出现的IllegalMonitorStateException异常。该代码尝试使用共享字符串变量current_thread控制线程执行顺序,但由于不当使用wait()和notifyAll()方法导致错误。

以下为问题代码片段:

package 并发编程.work2;public class Test {    private static volatile String CURRENT_THREAD = "A";    public static void main(String[] args) {        Thread t1 = new Thread(new PrintThreadName(), "A");        Thread t2 = new Thread(new PrintThreadName(), "B");        Thread t3 = new Thread(new PrintThreadName(), "C");        t1.start();        t2.start();        t3.start();    }    static class PrintThreadName implements Runnable {        @Override        public void run() {            for (int i = 0; i < 10; i++) {                synchronized (CURRENT_THREAD) {                    while (!Thread.currentThread().getName().equals(CURRENT_THREAD)) {                        try {                            CURRENT_THREAD.wait();                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                    System.out.println(Thread.currentThread().getName() + ":" + i);                    CURRENT_THREAD = CURRENT_THREAD.equals("A") ? "B" : (CURRENT_THREAD.equals("B") ? "C" : "A");                    CURRENT_THREAD.notifyAll();                }            }        }    }}

登录后复制

本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。

如若转载请注明出处:http://www.down96.com/tutorials/2269.html

热心网友热心网友
上一篇 2025-04-11 14:23
下一篇 2025-04-11 14:23

相关推荐

本站[软件指南]所有内容来自互联网投稿或AI智能生成,并不代表软件指南的立场。