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

Posted frankcui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程 - 线程常见函数的来源/持有锁情况相关的知识,希望对你有一定的参考价值。

 

 

线程常见函数 来源类 是否 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 同步代码执行完后才 会自然而然的释放锁
不 (执行完同步代码块才会释放)

以上是关于多线程 - 线程常见函数的来源/持有锁情况的主要内容,如果未能解决你的问题,请参考以下文章

Java:线程在没有获取锁的情况下持有锁

如何判断有另一个线程试图持有互斥锁?

java多线程---重入锁ReentrantLock

多线程死锁避免

多线程-方法介绍

多线程并发编程总结