java多线程细微知识点

1.interface Lcok

有tryLock()方法和lock()方法一样都会取得锁,取不到它会返回boolean值false。我们可以将thread导向其他不需要取得lock的task上。

此方法要在指定期间内等到lock怎么办?有带两个参数的方法

boolean tryLock(long time,TimeUnit unit)throws InterruptedException;

第一个参数指定时间单位的数目

第二个参数指定第一个参数应用什么单位来解释

如果要指定50毫秒。

long的值设置成50,TimeUnit值设置成TimeUnit.MILLISECONDS

此方法会在指定时间内等待lock类时tryLock()方法,会在没有取得lock时返回false

2.nested lock --用synchronized,系统会报错追踪递归取得lock的数目。

ReentrantLock对象会对内部的nested lock要求计数递增。调用unlock()递减此计数

是否有可能检测lock被递归取得了多少次?使用synchronized是不能知道的。Lock interface没有提供方法来检测嵌套取得的次数。

在ReentrantLock中public int getHoldCount();方法返回当前thread对lock所要求的数量。具体看文档。

3.两个同步方法,取得两个以上的lock的时候顺序要相同,否则出现死锁。参考第二章后半部分。

4.Condition的应用

5.线程不能共享存储器上的数据。只能共享主存上的。

posted on 2016-03-31 16:20  丛兰军  阅读(101)  评论(0)    收藏  举报

导航