java多线程---顺序打印ABC的三种实现---ReentrantLock方式
来源:互联网 发布:苹果一键刷机软件 编辑:程序博客网 时间:2024/05/18 02:17
使用jdk1.5并发包中引入的lock方式,这种方式使用比synchronized这种方式更加灵活,也提供了在获取锁时阻塞的办法
代码如下:
package com.zcj.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class PrintABC { private int status =1; private ReentrantLock lock = new ReentrantLock(); private Condition conditionA = lock.newCondition(); private Condition conditionB = lock.newCondition(); private Condition conditionC = lock.newCondition(); public void printA(){ lock.lock(); try{ if(status!=1){ conditionA.await(); } System.out.print("A"); status=2; conditionB.signal(); }catch(InterruptedException e){ e.printStackTrace(); }finally{ lock.unlock(); } } public void printB(){ lock.lock(); try{ if(status!=2){ conditionB.await(); } System.out.print("B"); status=3; conditionC.signal(); }catch(InterruptedException e){ e.printStackTrace(); }finally{ lock.unlock(); } } public void printC(){ lock.lock(); try{ if(status!=3){ conditionC.await(); } System.out.println("C"); status=1; conditionA.signal(); }catch(InterruptedException e){ e.printStackTrace(); }finally{ lock.unlock(); } } public static void main(String[] args){ PrintABC print = new PrintABC(); Thread threadA = new Thread(new RunnableA(print)); Thread threadB = new Thread(new RunnableB(print)); Thread threadC = new Thread(new RunnableC(print)); threadA.start(); threadB.start(); threadC.start(); }}class RunnableA implements Runnable{ private PrintABC print; public RunnableA(PrintABC print) {super();this.print = print;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=0;i<10;i++){print.printA();}}}class RunnableB implements Runnable{ private PrintABC print; public RunnableB(PrintABC print) {super();this.print = print;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=0;i<10;i++){print.printB();}}}class RunnableC implements Runnable{ private PrintABC print; public RunnableC(PrintABC print) {super();this.print = print;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=0;i<10;i++){print.printC();}}}
1 0
- java多线程---顺序打印ABC的三种实现---ReentrantLock方式
- java多线程---顺序打印ABC的三种实现---volatile方式
- java多线程---顺序打印ABC的三种实现---synchronized方式
- 多线程顺序打印ABC的三种实现---join方法
- java多线程---顺序打印ABC的三种实现---join方法
- java多线程顺序打印ABC
- java 多线程顺序打印ABC
- 顺序打印ABC------java多线程的一道经典面试题
- 多线程顺序打印ABC
- 多线程题 3个线程各打印一种字母,按顺序打印若干次ABC 的2种实现
- JAVA多线程打印ABC
- 《JAVA多线程之一》顺序打印ABC--讯雷面试题之一
- Java多线程编程7--实例--顺序打印3次ABC
- java多线程面试题,三个线程顺序打印ABC
- JAVA多线程实现的三种方式
- Java多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- git大全
- Java 驼峰命名法转下划线命名法
- UIAlertController和UIAlertView
- 内存泄露
- 简单的二维平面漫游
- java多线程---顺序打印ABC的三种实现---ReentrantLock方式
- 计算机视觉的一些测试数据集和源码站点
- Phaser.js物理引擎篇
- Java BufferedReader读取UTF-8文件中文乱码
- iOS常用公共方法
- Quartz的Misfire处理规则
- 学着写LUA脚本(二)
- 把数组排成最小的数
- iOS之网络篇