多线程之锁ReentrantLock与synchroniized

synchronized 对线程进行加锁,其他线程等待知道线程释放锁。若发生异常JVM会自动释放锁。如果线程等待IO或者调用了sleep()方法没有释放锁那么就要一直等待。

中断锁:可以中断的锁,lock 可以中断而synchronized 不可以中断。

由于等待时间过长我们想要中断切换下一个线程。  

多个线程都只是进行读操作,所以当一个线程在进行读操作时,其他线程只能等待无法进行读操作;

因此就需要一种机制来使得多个线程都只是进行读操作时,线程之间不会发生冲突,通过Lock就可以办到

通过Lock可以知道线程有没有成功获取到锁。这个是synchronized无法办到的

Lock需要主动的去释放锁,一般在finally块中使用unlock();;而Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。

猜你喜欢

转载自www.cnblogs.com/lianghaode/p/9124683.html