wait和notify再进一步

本文介绍了一个使用Java实现的多线程同步示例,通过共享对象的wait()和notifyAll()方法来协调线程间的等待与唤醒过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 代码(等待程序)1.

  1. package waitnotify2;
  2. public class MyThread implements Runnable{
  3.     Object o ;
  4.     
  5.     public MyThread(Object o){
  6.         
  7.         this.o = o;
  8.         
  9.     }
  10.     
  11.     public void run() {
  12.         
  13.         synchronized(o){
  14.             
  15.             System.out.println("等待中...");
  16.             
  17.             try {
  18.                 
  19.                 o.wait();
  20.                 
  21.             } catch (InterruptedException e) {
  22.                 
  23.                 e.printStackTrace();
  24.                 
  25.             }
  26.             
  27.             System.out.println("等待结束");
  28.             
  29.         }
  30.         
  31.     }
  32. }

代码2(唤醒程序):

  1. package waitnotify2;
  2. public class NotifyAll implements Runnable{
  3.     Object o ;
  4.     
  5.     public NotifyAll(Object o){
  6.         
  7.         this.o = o;
  8.         
  9.     }
  10.     
  11.     public void run() {
  12.         
  13.         synchronized(o){
  14.             
  15.             System.out.println("唤醒之前");
  16.             
  17.             try {
  18.                 
  19.                 Thread.sleep(7000);
  20.                 
  21.             } catch (InterruptedException e) {
  22.                 
  23.                 e.printStackTrace();
  24.                 
  25.             }
  26.             
  27.             o.notifyAll();
  28.             
  29.             System.out.println("唤醒了,哈哈");
  30.             
  31.         }
  32.         
  33.     }
  34. }

至此,我们就可以对上面的代码进行测试了:

  1. package waitnotify2;
  2. public class MainThread {
  3.     
  4.     public static void main(String[] args) {
  5.         Object o = new Object();//生成一个Object型对象        
  6.         MyThread myThread = new MyThread(o);//在此处体现了对同一对象的操作
  7.         
  8.         Thread t1 = new Thread(myThread);
  9.         
  10.         Thread t2 = new Thread(myThread);
  11.         
  12.         Thread t3 = new Thread(myThread);
  13.         
  14.         Thread t4 = new Thread(myThread);
  15.         
  16.         t1.start();
  17.         
  18.         t2.start();
  19.         
  20.         t3.start();
  21.         
  22.         t4.start();
  23.         
  24.         NotifyAll na = new NotifyAll(o);//在此处体现了对同一对象的操作
  25.         
  26.         Thread t = new Thread(na);
  27.         
  28.         t.start();
  29.     }
  30. }

好看一下运行结果:

----------------------------------------------------------------------------------------

等待中...
等待中...
等待中...
等待中...
唤醒之前            (注意,在此行之前的代码最先被打印,也即是所有的线程将被处于休眠状态,等待唤醒代码执行后,下面的语句即被打印)
唤醒了,哈哈
等待结束
等待结束
等待结束
等待结束

 

----------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值