Java多线程Lock对象常用方法(4)
2016-02-27 16:48
316 查看
Lock对象最后一个方法,tryLock()方法
这个方法的作用是,检查当前lock是否被其他线程持有,如果是,则不持有,如果不是,则持有。看效果。
运行结果如下:
Thread-0 get lock..
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
这个方法的作用是,检查当前lock是否被其他线程持有,如果是,则不持有,如果不是,则持有。看效果。
package com.lenovo.plm.dms.p24; import java.util.concurrent.locks.ReentrantLock; public class Service { public ReentrantLock lock = new ReentrantLock(); public void service(){ if(lock.tryLock()){ System.out.println(Thread.currentThread().getName() + " get locked"); }else{ System.out.println(Thread.currentThread().getName() + " does not get locked"); } } public void service2(){ lock.lock(); try { System.out.println(Thread.currentThread().getName() + " get lock.."); Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ lock.unlock(); } } } package com.lenovo.plm.dms.p24; public class Main { public static void main(String[] args) { final Service service = new Service(); Runnable runnable2 = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub service.service2(); } }; Thread threadC = new Thread(runnable2); threadC.start(); Runnable runnable = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub while(true){ service.service(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; Thread threadA = new Thread(runnable); threadA.setName("A"); threadA.start(); Thread threadB = new Thread(runnable); threadB.setName("B"); threadB.start(); } }
运行结果如下:
Thread-0 get lock..
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A does not get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
A get locked
B does not get locked
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序