• 2.sleep和wait的区别:


    1. sleepThread类的方法,waitobjectJava类库的老祖宗)的方法
    2. sleep阻塞的线程在指定时间后,会转变为可执行状态;wait它要等待notify的唤醒
    3. 执行了sleep的线程不会释放它所持有的锁,wait会释放它持有的锁。

    第三点比较重要,

    那代码来理解一下:

     1 @Override
     2     public void run() {
     3         synchronized (obj) {
     4             while (true) {
     5                 System.out.println(name);
     6                 try {
     7                     obj.wait();
     8                     //Thread.sleep(2000);
     9                     System.out.println("当前线程,会阻塞在这里");
    10                 } catch (InterruptedException e) {
    11                     e.printStackTrace();
    12                 }
    13                 
    14                 obj.notify();
    15             }
    16         }
    17     }    

    假如说有两个线程分别是a、b, 并且都是执行这个run方法,分两种情况分析:

    如果这个程序用第7行,没有第8行,当a线程执行到第7行时,其它线程可能马上可以得到被释放的锁对象,并被唤醒,然后就继续执行这个同步代码块。

    如果这个程序用第8行,没有第7行,当a线程执行到第8行时,其它线程要等2秒之后得到这个锁对象,等到被唤醒,然后才可以继续执行这个同步代码块。

  • 相关阅读:
    C#中使用MATLAB
    各种插值法及效果图对比
    Visual Studio中你所不知道的智能感知
    C#中使用Surfer
    XCode中连接使用GitHub
    个人作业Week1
    个人作业Week3
    个人作业Week2
    第一次作业——subway
    执行ajax加载页面中的js总结
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8781124.html
Copyright © 2020-2023  润新知