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

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

深入探讨多线程同步与wait()方法引发的IllegalMonitorStateException异常

本文分析一段旨在控制三个线程打印顺序的代码,并详细解释其中出现的IllegalMonitorStateException异常。目标是让线程A、B、C依次打印ID,循环五次,打印顺序为ABCA…

代码示例:

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 < 5; i++) {                synchronized (CURRENT_THREAD) {                    if (!Thread.currentThread().getName().equals(CURRENT_THREAD)) {                        try {                            CURRENT_THREAD.wait();                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                    System.out.println(Thread.currentThread().getName());                    CURRENT_THREAD = getNextThread(CURRENT_THREAD);                    CURRENT_THREAD.notifyAll();                }            }        }        private String getNextThread(String current) {            switch (current) {                case "A":                    return "B";                case "B":                    return "C";                case "C":                    return "A";                default:                    return "A";            }        }    }}

登录后复制

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

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

热心网友热心网友
上一篇 2025-04-11 13:57
下一篇 2025-04-11 13:57

相关推荐

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