多线程 - 线程常见函数的来源/持有锁情况

 

 

线程常见函数 来源类 是否 Static 说明 是否释放锁
sleep() Thread static 只能操作当前线程。时间到后(没有interrupt的情况下),回到“就绪”状态
yield() Thread static 只能操作当前线程。只让出CPU时间片。不让出持有的锁和其他资源(磁盘IO,内存)
join() Thread no 在线程 B 中调用了线程 A 的 Join()方法,直到线程 A 执行完毕后,才会继续 执行线程 B
         
interrupt() Thread no

可以在A 线程里调用B.interrupt(),只是将B线程的interrupted标志位置为true。

  • 一般情况下,毫无影响。由用户自定义代码处理该标志位改变后的情况。
  • 但当B线程正在sleep,wait,join,B线程自己会立即抛InterruptException异常...详情
interrupted() Thread static 只能操作当前线程。会判断当前线程的interrupted状态,并且会重置该状态为false.
isInterrupted() Thread no 可以在A 线程里调用B.isInterrupted().只是返回被检查线程的标志位情况,不会重置。
         
wait() Object no

针对某一个对象调用:object.wait(). 

  • 会释放当前线程持有的锁,而且当前被唤醒后,会重新 去竞争锁,锁竞争到后才会执行 wait 方法后面的代码
notify()/notifyAll() Object no

针对某一个对象调用:object.notify()

  • 调用 notify()系列方法后,对锁无影响,线程只有在 syn 同步代码执行完后才 会自然而然的释放锁
不 (执行完同步代码块才会释放)

posted on 2020-03-14 18:49  frank_cui  阅读(396)  评论(0编辑  收藏  举报

导航

levels of contents