Lock接口的使用
2018-02-25 11:04
183 查看
在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在jdk1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩张功能上也更加强大,使用上也比synchronized更加的灵活。
示例代码:
输出结果:
从输出的结果中我们可以看到启动的5个线程在调用Service01对象的testMethod()方法时是同步调用的,并没有使用synchronized获取对象锁的方式实现同步调用,而是使用了更加灵活的Lock接口类型的lock和unlock方法获取和释放对象锁达到同步调用的效果。
示例代码:
// class Service01 public class Service01 { private Lock lock = new ReentrantLock(); public void testMethod() { lock.lock(); for(int i = 0; i < 3; ++ i) { System.out.println("ThreadName=" + Thread.currentThread().getName() + (" " + (i + 1))); } lock.unlock(); } } // class Thread01 public class Thread01 extends Thread { private Service01 service; public Thread01(Service01 service) { this.service = service; } @Override public void run() { service.testMethod(); } } // class Main public class Main { public static void main(String[] args) { thread01(); } private static void thread01() { Service01 service = new Service01(); Thread01 t1 = new Thread01(service); Thread01 t2 = new Thread01(service); Thread01 t3 = new Thread01(service); Thread01 t4 = new Thread01(service); Thread01 t5 = new Thread01(service); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
输出结果:
ThreadName=Thread-0 1 ThreadName=Thread-0 2 ThreadName=Thread-0 3 ThreadName=Thread-1 1 ThreadName=Thread-1 2 ThreadName=Thread-1 3 ThreadName=Thread-2 1 ThreadName=Thread-2 2 ThreadName=Thread-2 3 ThreadName=Thread-4 1 ThreadName=Thread-4 2 ThreadName=Thread-4 3 ThreadName=Thread-3 1 ThreadName=Thread-3 2 ThreadName=Thread-3 3
从输出的结果中我们可以看到启动的5个线程在调用Service01对象的testMethod()方法时是同步调用的,并没有使用synchronized获取对象锁的方式实现同步调用,而是使用了更加灵活的Lock接口类型的lock和unlock方法获取和释放对象锁达到同步调用的效果。
相关文章推荐
- 如何使用Lock接口来实现等待/通知机制
- java多线程(3):Lock接口和Condition监视器接口使用详解
- 线程锁---Lock接口技术的简单使用
- DirectX3D中LockRect接口使用注意事项
- Lock接口的认识和使用
- Lock接口的介绍及使用
- Java多线程之~~~Lock接口和ReentrantLock的使用
- Java多线程的~~~Lock接口和ReentrantLock使用
- java 多线程 lock接口 的使用
- vb.net中接口的使用
- 使用json解析国家气象局(天气预报)接口数据
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
- 使用CallableStatement接口调用存储过程
- 使用CAS的RESTFUL接口使CS系统单点登录BS系统
- WEB使用OAuth2协议实现开放接口的设计方案(待完善)
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- McBsp接口使用和概念
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- Silverlight 2.0使用Lock, Interlocked, EventWaitHandle, Monitor来实现线程同步//C#线程同步的几种方法
- libcurl简单接口的使用