wait和notify线程通信

package A_ShangGuiGu.Thread.ThreadTest;

/**
* 线程通信的实例:两个线程交替打印1-100,一人一次
* 涉及到的方法:
* wait():调用wait()方法会使得调用该方法的线程进入阻塞状态。同时释放锁。
* notify():唤醒一个wait的线程,如果只有一个线程,则唤醒一个,如果有多个线程则唤醒优先级高的,如果优先级相同则随机唤醒。
* notifyAll():唤醒所有线程。
* 说明:
* 这三个方法必须使用到同步代码块或者同步方法中。
* 这三个方法的调用者必须是同步代码块或者同步方法的锁。也就是同步监视器synchronized (this)里的this
* 如果不一致会导致异常。
* 这三个方法是定义在java.lang.Object包下
*/
class Test01 implements Runnable{
private int a = 1;
@Override
public void run() {
while (true){
synchronized (this) {
this.notifyAll();
if (a<=100){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName()+"打印数据:"+a);
a++;
try {
this.wait();//调用wait()方法会使得调用该方法的线程进入阻塞状态。同时释放锁。
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}else {
break;
}
}
}
}
}
public class CommunicationTest {//线程通信。

public static void main(String[] args) {
Test01 test01 = new Test01();
Thread t1 = new Thread(test01);
Thread t2 = new Thread(test01);
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
}

}
posted @   zhazhawei906  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示