第5章 多线程 - 补充案例 联系客服

发布时间 : 星期一 文章第5章 多线程 - 补充案例更新完毕开始阅读b8317dca55270722182ef717

博学谷——让IT教学更简单,让IT学习更有效

}

// 生产者类

class Producter implements Runnable { }

// 消费者类

class Customer implements Runnable { }

public class Example10 { }

public static void main(String[] args) { }

Product p = new Product(); Producter pr = new Producter(p); Customer cr = new Customer(p); Thread t1 = new Thread(pr); Thread t2 = new Thread(pr); Thread t3 = new Thread(cr); Thread t4 = new Thread(cr); t1.start(); t2.start(); t3.start(); t4.start(); private Product p; Customer(Product p) { }

public void run() { }

while (true) { }

p.get(); this.p = p; private Product p; Producter(Product p) { }

public void run() { }

while (true) { }

p.set(\鼠标\this.p = p;

运行结果如图5-10所示。

17

博学谷——让IT教学更简单,让IT学习更有效

图5-10 运行结果

三、案例总结

1、wait()、notify()和notifyAll()这三个方法的调用者都应该是同步锁对象,如果这三个方法的调用者不是同步锁对象,Java虚拟机就会抛出IllegalMonitorStateException异常。

2、在线程通信中的,如果需要控制多个线程按照一定的顺序轮流执行,则这几个线程的锁对象必须是同一个锁对象。

18