Java多线程编程核心技术( 七 )

< 10; i++) {d[i] = new ThreadD(service);e[i] = new ThreadE(service);d[i].start();e[i].start();}}}
package com.xkf.reentrantLock.demo.procon;public class ThreadD extends Thread{private AlternateProConService service ;public ThreadD(AlternateProConService service) {this.service = service;}@Overridepublic void run() {for (int i = 0; i < 10; i++) {service.produce();}}}
package com.xkf.reentrantLock.demo.procon;public class ThreadE extends Thread{private AlternateProConService service ;public ThreadE(AlternateProConService service) {this.service = service;}@Overridepublic void run() {for (int i = 0; i < 10; i++) {service.consume();}}}
26 公平锁与非公平锁
Lock分为公平锁和非公平锁 。
公平锁:表示线程获取锁的顺序时按照线程加锁的顺序来分配的 , 即先来先得 。
非公平锁:获取锁的抢占机制 , 是随机获得锁的 , 这个方式可能造成某些线程一直拿不到锁 , 也就造成不公平 。
27.int () 查询当前线程保持锁定的个数 , 也就是调用lock()的次数
28. int ()返回正在等待获取此锁定的线程估计数
29.int ( ) 返回等待与此锁定相关的给定条件的线程估计数
30.( )查询指定的线程是否正在等待此锁定
31. () 查询是否有线程正在等待获取此锁定 。
32. ( ) 是否有线程正在等待与此锁定有关的条件
33. ()判断是不是公平锁
34.d() 当前线程是否保持此锁定
35. () 查询此锁定是否由任意线程保持
【Java多线程编程核心技术】36. void ()如果当前线程没有被中断 , 则获取锁定 , 如果已经中断则抛出异常 。
37. ()仅在调用时锁定未被另一个线程保持的情况下 , 才获取该锁定
38. (long ,unit) 如果锁定在给定等待时间内没有被另一个线程保持 , 且当前线程未被中断 , 则获取该锁定 。
39. void ()
调用的前提 , 当前线程已经成功获得与该条件对象绑定的重入锁 , 否则会抛出 。
调用结束后 , 结束等待的唯一方法是其他线程调用该条件对象的()或() 。
等待过程中如果当前线程被中断 , 该方法仍会继续等待 , 同时保留该线程的中断状态 。
package com.xkf.reentrantLock.demo.awaitUninterruptibly;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class MyService {private ReentrantLock lock = new ReentrantLock();private Condition condition = lock.newCondition();public void testMethod(){try {lock.lock();System.out.println("wait begin");condition.awaitUninterruptibly();System.out.println("wait end");} catch (Exception e) {e.printStackTrace();}finally{lock.unlock();}}}
package com.xkf.reentrantLock.demo.awaitUninterruptibly;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class MyService {private ReentrantLock lock = new ReentrantLock();private Condition condition = lock.newCondition();public void testMethod(){try {lock.lock();System.out.println("wait begin");condition.awaitUninterruptibly();System.out.println("wait end");} catch (Exception e) {e.printStackTrace();}finally{lock.unlock();}}}
package com.xkf.reentrantLock.demo.awaitUninterruptibly;public class MyThread extends Thread{private MyService service;public MyThread(MyService service) {this.service = service;}@Overridepublic void run() {service.testMethod();}}
40.()
41.使用实现顺序执行