Java多线程之wait(),notify()

     在java多线程中,线程的交互十分重要,而java也自带了一些库函数用于进行线程的交互,而wait(),notify()就十分重要,那么我们应该如何正确使用wait()和notify()呢?

     1.我们应该在同一个类方法里面同时使用这2个方法,把这2个类的方法交给类来监管,为什么呢?wait()顾名思义,等待,它会把自身的线程挂起来,等同一个监管者发起notify(),或者allnotify()时再继续执行,所以说如果这2个方法不在同一个类里面,给同一个监管器监管,那么就大大增加了代码的难度。

import javax.naming.ldap.PagedResultsControl;

class h{
    synchronized void f1() throws InterruptedException {
        int c = 1;
        System.out.println(11);
        while(c <= 5)
            System.out.println(c++);
        wait();
        System.out.println(111);
    }
    synchronized void f2()
    {
        System.out.println(2);
        notify();
    }
}
public class hello {
       public static void main(String[] args)
       {
           h H = new h();
           Runnable runnable1 = ()->{
               try {
                   H.f1();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           };
           Runnable runnable2 = ()->{
               H.f2();
           };
           Thread thread1 = new Thread(runnable1);
           Thread thread2 = new Thread(runnable2);
           thread1.start();
           thread2.start();
       }
}

结果:

11
1
2
3
4
5
2
111

2.sleep()和wait()的区别是什么呢?

sleep()是Thread()类中的函数,wait()是java自带的object函数,前者挂起时并不会交出锁,意味着它的挂起只是单纯的挂起,其他线程并不能进入相同监管器的代码,而wait()他会交出锁,其他线程也可以进去相应代码段。

3.wait()执行后,接收到notify()后代码是重新执行还是在wait()后面继续执行?

  答案是后者,看我给的样例结果就知道了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值