2018年三月月 发布的文章

Java中可重入锁ReentrantLock

ReentrantLock是JDK1.5中java util concurrent (JUC)包提供的一种锁实现,和synchronized不同,synchronized是由JVM操控获取锁和释放锁,ReentrantLock是从代码层面实现的同步。
ReentrantLock类的结构图:

阅读全文 –

Java中的读/写锁

相比饥饿与公平里Lock的实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决这个问题。

Java5在java.util.concurrent包中已经包含了读写锁。尽管如此,我们还是应该了解其实现背后的原理。

阅读全文 –

饥饿与公平

如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。线程被“饥饿致死”正是因为它得不到CPU运行时间的机会,解决饥饿的方案被称之为“公平性” – 即所有线程均能公平地获得运行机会。

阅读全文 –