我就是厕所所长
yield
join
notify
await
ThredStatu
Ready状态
Running
Thread.yield
锁
synchronized 可重入锁
可重入:一个同步方法可以调用另外一个同步方法,一个线程已经拥有某个对象的锁,再次申请的时候仍然会得到该对象的锁.
hotspot实现
是根据对象字节的前面两位来记录锁信息
哪个线程拥有这把锁(线程id):当下次这个线程在来到锁这边时,就直接让它过去了,如果是另一个线程过来,XX发现线程id不一样,就升级为自选锁(自旋十次之后还没拿到,升级(wait)为重量级锁,进入等待队列里)
锁类型
public synchronized static void m() { //这里等同于synchronized(FineCoarseLock.class)count--;System.out.println(Thread.currentThread().getName() + " count = " + count);}
程序在执行过程中,如果出现异常,默认情况锁会被释放
所以,在并发处理的过程中,有异常要多加小心,不然可能会发生不一致的情况。
偏向锁
自选锁
如果线程争用:升级为 自旋锁,10次以后升级为系统锁
占用CPU
执行时间短(加锁代码),线程数少,用自旋
系统锁(重量级锁)
不占用CPU
执行时间长,线程数多,用系统锁
_
