转载自:https://blog.youkuaiyun.com/pange1991/article/details/53860651
“Synchronized:线程一旦进入 该对象的锁池,就不能反悔了,一直要等到获得该对象的锁才行。独占锁 对应的应该就是重量级锁,现在的高版本应该好很多了;线程切换是 指的 现在持有该锁的 线程,发生阻塞或执行完 释放 该锁,然后下一个线程切换上来; Lock:和之相比最突出就是,线程能自己从 该对象的 锁池 中出来,而利用Synchronized的话,就要一直等下去”
线程的状态分为:
1.初始化(NEW):刚new出来的实例
2.就绪(READY):ready只是说你可以准备开始运行了,但还没运行。
进入就绪状态的几种情况
{
a.一个刚new出来的线程调用start()方法后
b.处于running状态的线程调用yield()方法
c.sleep()方法结束
d.同步队列中的线程拿到锁后
}
3.运行中(RUNNING)
4.阻塞(BLOCKED):
5.等待(WAITING)
6.终止(TERMINATED)
调用wait方法后会进入等待队列,需要另一个线程调用同一个对象的notify()方法,才会从等待队列中挑选一个进入同步队列(也是这里我才知道一些Object中为什么会有notyfy()方法对原因)。注意notyfy()不会立即生效,必须等到调用方法执行完同步代码块,放弃锁之后才会起作用(等待队列与同步队列的图可以看转载来源,很形象易懂)