Java多线程基础理解

  • wait: 让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的notify()方法或是notifyAll()方法”,当前线程被唤醒(进入“就绪状态”)-会释放锁

  • yield:让步线程   yield()方法的作用是让步,它能让当前线程由“运行状态”进入到“就绪状态”,从而让其他具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其他具有相同优先级的线程就一定能获得执行权;也有可能是当前线程有进入到“运行状态”继续运行  不会释放锁

          sleep: 方法定义在Thread类中,sleep()的作用是让当前线程休眠,即当前线程会从“远程状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待CPU的调度执行   不会释放锁

        

        

       join()方法和interrupt()方法

         一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束结束才继续执行。如果某个线程在另一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复(即t.isAlive()返回为假)。也可以在调用jion()时带上一个超时参数(单位可以是毫秒,或者纳秒),这样如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回。对jion()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法,这时需要用到try_catch子句

    • yield()和wait()的比较  

    • wait()的作用是让当前线程由“运行状态”进入到“等待(阻塞)”的同时,也会释放同步锁。而yield()的作用是让步,它也是让当前线程离开“运行状态”。区别是:(1)wait()是让线程由“运行状态”进入到“等待(阻塞)状态”,而yield()是让线程由“运行状态”进入到“就绪状态”。(2)wait()是会让线程释放它所持有的对象的同步锁,而yield()方法不会释放对象的同步锁

    • sleep()和wait()的比较:

    •  wait()的作用是让当前的线程由“运行状态”进入到“等待(阻塞)状态”的同时,也会释放同步锁。但是sleep()的作用是让当前线程由“运行状态”进入到“休眠(阻塞)”状态。wait()会释放对象的同步锁,而sleep()则不会释放锁。

原文地址:https://www.cnblogs.com/wanglu1991/p/11889884.html