Java多线程Lock对象常用方法(1)
来源:互联网 发布:淘宝店铺资质60000 编辑:程序博客网 时间:2024/05/16 09:17
Lock对象除了有给当前对象加锁的功能,还有一系列的方法可以使用,下面逐一学习。
getHoldCount():查询当前线程保持此锁定的个数
package com.lenovo.plm.dms.p18;import java.util.concurrent.locks.ReentrantLock;public class Service { private ReentrantLock lock = new ReentrantLock(); public void service1(){ lock.lock(); System.out.println("service1 getHoldCount:"+lock.getHoldCount()); service2(); lock.unlock(); } public void service2(){ lock.lock(); System.out.println("service2 getHoldCount:"+lock.getHoldCount()); lock.unlock(); } public static void main(String[] args) { Service service = new Service(); service.service1(); }}
执行结果如下:
service1 getHoldCount:1
service2 getHoldCount:2
getQueueLength():取得正在等待此锁定的线程数量
package com.lenovo.plm.dms.p19;import java.util.concurrent.locks.ReentrantLock;public class Service { public ReentrantLock lock = new ReentrantLock(); public void service(){ lock.lock(); System.out.println(Thread.currentThread().getName() + " come in the method"); try { Thread.sleep(Integer.MAX_VALUE); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ lock.unlock(); } } }package com.lenovo.plm.dms.p19;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.service(); } }; 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(); } System.out.println(service.lock.getQueueLength()); }}
运行结果如下:
Thread-0 come in the method
9
getWaitQueueLength(Condition condition):取得等待此锁相关给定条件condition的线程数量。
package com.lenovo.plm.dms.p20;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 { condition.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ lock.unlock(); } } public void signalMethod(){ lock.lock(); System.out.println("There are " + lock.getWaitQueueLength(condition) + " waiting condition"); condition.signal(); System.out.println("There are " + lock.getWaitQueueLength(condition) + " waiting condition"); lock.unlock(); }}package com.lenovo.plm.dms.p20;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.signalMethod(); }}
运行结果如下:
There are 10 waiting condition
There are 9 waiting condition
0 0
- Java多线程Lock对象常用方法(1)
- Java多线程Lock对象常用方法(2)
- Java多线程Lock对象常用方法(3)
- Java多线程Lock对象常用方法(4)
- Java多线程Lock对象之ReentrantLock(1)
- Java多线程----java 对象锁(synchronized/lock)
- Java多线程Lock对象之ReentrantLock(2)
- Java多线程Lock对象之读写锁
- Java多线程探究-Lock锁对象
- java多线程-常用方法
- java多线程常用方法
- Java多线程常用方法
- Java多线程探究-Lock对象锁条件变量
- Java多线程---Lock类
- java多线程-Lock
- Java 多线程:Lock 关键字
- Java 多线程:Lock接口
- Java 多线程:Lock 关键字
- Ajax发送和接收请求
- 第三届_海盗喝酒
- OC加强-Foudation
- 计算NandFlash要传入的行地址和列地址
- strcpy函数与memcpy函数实现
- Java多线程Lock对象常用方法(1)
- java 如何实现一个字符串的反转
- 内存分析
- 软件工程师的定义
- uva10132 - File Fragmentation
- C基础——文本格式和二进制格式的区别
- 第三届_电视台答题
- hdu 2136 Largest prime factor
- mac下修改mysql密码