Object wait()函数

一个线程在同步块或者同步方法中使用同步对象调用 wait() 方法的时候,wait()会暂时停止目前进程的执行,直到有信号来到或子进程结 束。如果在调用wait()时子进程已经结束,则wait()会立即返 回子进程结束状态值。

当线程B访问某个共享资源时,想获取资源的锁对象,发现这个锁已经被线程A拿到了,这个时候,线程B只能被挂起,等待线程A释放锁。
但是拿到锁的线程A在执行的过程中,因为某些条件还不满足,暂时不想继续执行下去,想先等待一下(注意:是已经拿到锁的线程A自己想主动等待的),希望等到某个条件满足后,继续执行任务。在同步代码块里,线程A必须先释放锁,线程B才有资格获取锁,进入同步代码块,执行代码。等线程B执行完后,线程A需要的条件已经满足,那么这个时候必须有一个通知机制,让线程A从等待状态变成执行状态,继续执行代码。

	public class test {
     public static void main(String[] a){
        Object object=new Object();
   Thread thread=new Thread(){
       @Override
       public void run() {
           synchronized (object){
               System.out.println("thrad star");
               try {
                   object.wait();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
           System.out.println("thrad end");
       }
   };
        Thread thread1=new Thread(){
            @Override
            public void run() {
                synchronized (object){
                    System.out.println("thrad1 star");
                }
                System.out.println("thrad1 end");
            }
        };
        Thread thread2=new Thread(){
            @Override
            public void run() {
                synchronized (object){
                    System.out.println("thrad2 star");
                    object.notify();
                }
                System.out.println("thrad2 end");
            }
        };
        Thread thread3=new Thread(){
            @Override
            public void run() {
                synchronized (object){
                    System.out.println("thrad3 start");
                    try {
                        object.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    object.notify();
                    System.out.println("thrad3 end");
                }
            }
        };
        thread.start();
        thread1.start();
        thread2.start();
        thread3.start();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值