java锁的Lock的几种用法
来源:互联网 发布:java实现xml文件解析 编辑:程序博客网 时间:2024/06/09 03:00
转载:https://segmentfault.com/q/1010000005602326
package concurrent;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class TestTryLock { private List<Object> list = new ArrayList<Object>(); private Lock lock = new ReentrantLock(); public static void main(String[] args) { final TestTryLock test = new TestTryLock(); new Thread("第一个线程 ") { @Override public void run() { test.doSomething(Thread.currentThread()); } }.start(); new Thread("第二个线程 ") { @Override public void run() { test.doSomething(Thread.currentThread()); } }.start(); } public void doSomething(Thread thread) { if (lock.tryLock()) { try { System.out.println(thread.getName() + "得到了锁."); for (int i = 0; i < 10; i++) { list.add(i); } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(thread.getName() + "释放了锁."); lock.unlock(); } } else { System.out.println(thread.getName() + "获取锁失败."); } }}
以上代码运行结果如下:
第一个线程 得到了锁.第一个线程 释放了锁.第二个线程 得到了锁.第二个线程 释放了锁.
package concurrent;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class TestTryLock { private List<Object> list = new ArrayList<Object>(); private Lock lock = new ReentrantLock(); public static void main(String[] args) { final TestTryLock test = new TestTryLock(); new Thread("第一个线程 ") { @Override public void run() { test.doSomething(Thread.currentThread()); } }.start(); new Thread("第二个线程 ") { @Override public void run() { test.doSomething(Thread.currentThread()); } }.start(); } public void doSomething(Thread thread) { if (lock.tryLock()) { try { System.out.println(thread.getName() + "得到了锁."); for (int i = 0; i < 10; i++) { list.add(i); Thread.sleep(10); } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(thread.getName() + "释放了锁."); lock.unlock(); } } else { System.out.println(thread.getName() + "获取锁失败."); } }}
运行结果如下:
第二个线程 得到了锁.第一个线程 获取锁失败.第二个线程 释放了锁.
阅读全文
0 0
- java锁的Lock的几种用法
- 锁 Lock 的用法简介
- java Lock和Condition的用法
- Java并发编程--Lock的用法
- TX Lock的几种情况
- java的for 的几种用法
- Lock的用法
- java for 的几种用法
- java for 的几种用法
- java计时器的几种用法
- java for 的几种用法
- JAVA for 的几种用法
- java for 的几种用法
- java定时器的几种用法
- java for 的几种用法 .
- java this关键字的几种用法
- java枚举的几种用法
- java for 的几种用法
- NYOJ 表达式求值(数组)
- Java——继承,重载,重写三剑客
- 数据结构与算法---栈与ADT
- 一天能学会的有用的计算机技术
- 三相SPWM逆变,输出相电压有效值与调制度的关系
- java锁的Lock的几种用法
- 模拟实现atoi和itoa以及100G 的IP地址求出现次数最多的前K个IP
- Android 灵活且功能强大的流式布局
- 设计模式学习笔记十六:代理模式(Proxy Pattern)
- 练习 1
- 17倍(Times17)
- hibernate的缓存概述:
- 数据库SQL优化大总结之 百万级数据库优化方案
- MySQL workbench 中修改"Host 'X' is not allowed to connect to this MySQL server"] with root ca