什么是网站标题,俄语网站推广通,一对一软件,网页制作与网站建设pdf概述
1、API在JDK的java.util.concurrent.locks下。
2、不是Java关键字#xff0c;是接口。
3、ReentrantLock是JDK唯一实现了Lock接口的类。 public interface Lock {//获取锁void lock();//可以响应中断的锁void lockInterruptibly() throws InterruptedException;//尝试…概述
1、API在JDK的java.util.concurrent.locks下。
2、不是Java关键字是接口。
3、ReentrantLock是JDK唯一实现了Lock接口的类。 public interface Lock {//获取锁void lock();//可以响应中断的锁void lockInterruptibly() throws InterruptedException;//尝试获取锁boolean tryLock();//尝试获取锁如果拿不到会等待time的时间boolean tryLock(long time, TimeUnit unit) throws InterruptedException;//释放锁void unlock();
}四个获取锁方法 lock()
是平常使用得最多的一个方法就是用来获取锁。如果锁已被其他线程获取则进行等待。 由于在前面讲到如果采用Lock必须主动去释放锁并且在发生异常时不会自动释放锁。因此一般来说使用Lock必须在try{}catch{}块中进行并且将释放锁的操作放在finally块中进行以保证锁一定被被释放防止死锁的发生。
实例http://blog.csdn.net/zengmingen/article/details/53257891
tryLock() 是有返回值的它表示用来尝试获取锁如果获取成功则返回true如果获取失败即锁已被其他线程获取则返回false也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。
实例http://blog.csdn.net/zengmingen/article/details/53259279 tryLock(long time, TimeUnit unit) 和tryLock()方法是类似的只不过区别在于这个方法在拿不到锁时会等待一定的时间在时间期限之内如果还拿不到锁就返回false。如果如果一开始拿到锁或者在等待期间内拿到了锁则返回true。
实例http://blog.csdn.net/zengmingen/article/details/53259394 lockInterruptibly() 比较特殊当通过这个方法去获取锁时如果其他线程正在等待获取锁则这个线程能够响应中断即中断线程的等待状态。也就使说当两个线程同时通过
lockInterruptibly()想获取某个锁时假若此时线程A获取到了锁而线程B只有等待那么对线程B调用threadB.interrupt()方法能够中断线程B的等待过程。
【注意等待的那个线程B可以被中断不是正在执行的A线程被中断。 注意当一个线程获取了锁之后是不会被interrupt()方法中断的。 因此当通过lockInterruptibly()方法获取某个锁时如果不能获取到只有进行等待的情况下是可以响应中断的。 而用synchronized修饰的话当一个线程处于等待某个锁的状态是无法被中断的只有一直等待下去。】
实例http://blog.csdn.net/zengmingen/article/details/53260650 Lock和synchronized的选择 1Lock是一个接口而synchronized是Java中的关键字synchronized是内置的语言实现。 2synchronized在发生异常时会自动释放线程占有的锁因此不会导致死锁现象发生。 而Lock在发生异常时如果没有主动通过unLock()去释放锁则很可能造成死锁现象因此使用Lock时需要在finally块中释放锁。 3Lock可以让等待锁的线程响应中断而synchronized却不行使用synchronized时等待的线程会一直等待下去不能够响应中断 4通过Lock可以知道有没有成功获取锁而synchronized却无法办到。 5Lock可以提高多个线程进行读操作的效率。 在性能上来说如果竞争资源不激烈两者的性能是差不多的而当竞争资源非常激烈时即有大量线程同时竞争此时Lock的性能要远远优于synchronized。在具体使用时要根据适当情况选择。