java sleep和wait相关知识汇总

2019-10-11  本文已影响0人  Easy的幸福

java sleep和wait的区别?

synchronized { // 获取锁
  while (判定条件) wait(); // 如果条件不满足就释放锁,并且等着
  // ... 要进入的代码
  notify(); // 或者notifyAll,通知其他wait者可以重来
}

如果不写synchronized,就是运行时错误IllegalMonitorStateException;万一忘记了while或者忘记notify,代码正确性就可能有问题,并且连运行时错误都没有。


线程间的状态切换:

等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

并发编程中常用的几个jdk中的api

上一篇 下一篇

猜你喜欢

热点阅读