/**
*
* 线程通信的例子:两个线程交替打印100以内的数
* wait会释放锁,阻塞当前线程
* notify一旦执行此方法,就会唤醒被wait的线程,如果有多个就会唤醒优先级高的
* sleep不会释放锁
*********************************************************************
*必须放入同步代码块里面或同步方法里面
*wait方法的调用者必须是当前同步代码块或者方法同步监视器
*定义在Object中
*
**********************************************************************
*sleep与wait方法的异同
*都可以让当前线程进入阻塞状态
*sleep不会释放同步监视器
*wait会释放同步监视器
*两个方法声明的位置不同,Thread中声明sleep,Object中声明wait
*调用的范围不同:sleep可以在任何位置,wait只能被同步监视器调用,所以只能在同步代码块
*
*/
class Number implements Runnable{
private int number = 1;
public void run() {
while(true) {
synchronized(this) {
notify();
if(number<=100) {
System.out.println(Thread.currentThread().getName()+":"+number);
number++;
try {
//使得调用wait方法的进程进入阻塞状态
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
break;
}
}
}
}
}
public class ThreadMsg {
public static void main(String[] args) {
Number number = new Number();
Thread t1 = new Thread(number);
Thread t2 = new Thread(number);
t1.setName("A");
t2.setName("B");
t1.start();
t2.start();
}
}
线程通信
最新推荐文章于 2025-04-25 19:16:38 发布