Java多线程Lock对象常用方法(2)

来源:互联网 发布:淘宝网充值平台2016 编辑:程序博客网 时间:2024/06/05 14:24

hasQueueThread(Thread thread):方法用于测试thread线程是否在等待当前lock。
hasQueueThreads():方法用于测试是否有现成在等待当前lock。

package com.lenovo.plm.dms.p21;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Service {    public ReentrantLock lock = new ReentrantLock();    public Condition condition = lock.newCondition();    public void waitMethod(){        lock.lock();        try {            Thread.sleep(Integer.MAX_VALUE);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            lock.unlock();        }            }}package com.lenovo.plm.dms.p21;public class Main {    public static void main(String[] args) {        final Service service = new Service();        Runnable runnable = new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                service.waitMethod();            }        };        Thread threadA = new Thread(runnable);        threadA.start();        try {            Thread.sleep(5000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        Thread threadB = new Thread(runnable);        threadB.start();        try {            Thread.sleep(5000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.println(service.lock.hasQueuedThread(threadA));        System.out.println(service.lock.hasQueuedThread(threadB));        System.out.println(service.lock.hasQueuedThreads());    }   }

测试结果如下:
false
true
true

hasWaiters(Condition condition):方法用于测试是否有现成在等待当前condition对象。
getWaitQueueLength(condition):方法用于测试当前正在等待condition对象的线程数量。

package com.lenovo.plm.dms.p22;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Service {    private ReentrantLock lock = new ReentrantLock();    private Condition condition = lock.newCondition();    public void waitMethod(){        lock.lock();        try {            System.out.println("To check if has threads waiting condition:"+lock.hasWaiters(condition) +  " and thread is: "+ lock.getWaitQueueLength(condition));            condition.await();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            lock.unlock();        }    }    public void notifyMethod(){        lock.lock();        System.out.println("To check if has threads waiting condition:"+lock.hasWaiters(condition) +  " and thread is: "+ lock.getWaitQueueLength(condition));        condition.signal();        lock.unlock();    }}package com.lenovo.plm.dms.p22;public class Main {    public static void main(String[] args) {        final Service service = new Service();        Runnable runnable = new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                service.waitMethod();            }        };        Thread[] threadArray = new Thread[10];        for(int i = 0;i<10;i++){            threadArray[i] = new Thread(runnable);        }        for(int i = 0;i<10;i++){            threadArray[i].start();        }        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        service.notifyMethod();    }}

测试结果如下:
To check if has threads waiting condition:false and thread is: 0
To check if has threads waiting condition:true and thread is: 1
To check if has threads waiting condition:true and thread is: 2
To check if has threads waiting condition:true and thread is: 3
To check if has threads waiting condition:true and thread is: 4
To check if has threads waiting condition:true and thread is: 5
To check if has threads waiting condition:true and thread is: 6
To check if has threads waiting condition:true and thread is: 7
To check if has threads waiting condition:true and thread is: 8
To check if has threads waiting condition:true and thread is: 9
To check if has threads waiting condition:true and thread is: 10

0 0
原创粉丝点击