多线程同步与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生成,不代表软件指南立场。本站不负任何法律责任。