采用JDK并发包提供的Lock, Condition等类的相关方法控制多线程.
来源:互联网 发布:苹果5s怎么能用4g网络 编辑:程序博客网 时间:2024/06/05 20:10
package com.yyj.zxy;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class SanJunFight1 {/** * 三只部队轮流上战场,每只部队在战场上每一轮只能进行10次攻击; * 合计攻击300次则停止攻击; */private static int count = 1; //攻击计数器private static int part = 1; //默认第一支部队先进行第一次攻击private static int n = 10;private static ReentrantLock lock = new ReentrantLock();private static Condition con1 = lock.newCondition();private static Condition con2 = lock.newCondition();private static Condition con3 = lock.newCondition();public static void main(String[] args) { //第一支部队攻击线程; new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < n; i++) {lock.lock();while(part !=1)try {con1.await();} catch (InterruptedException e) {e.printStackTrace();}for(int j=0;j<n;j++){System.out.print("部队:"+part+"进行第"+ count+"次攻击!");int fightTime = 0;fightTime = 1000;System.out.println("攻击"+fightTime/1000+" 秒结束 >>>>> 本次攻击完成" );count ++;}System.out.println();part = 2; //n次攻击后,由部队2进行下一轮攻击con2.signal(); //唤醒等待攻击的部队;}}}).start(); //第2支部队攻击线程; new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < n; i++) { lock.lock(); while(part !=2) try { con2.await(); } catch (InterruptedException e) { e.printStackTrace(); } for(int j=0;j<n;j++){System.out.print("部队:"+part+"进行第"+ count+"次攻击!");int fightTime = 0;fightTime = 1000;System.out.println("攻击"+fightTime/1000+" 秒结束 >>>>> 本次攻击完成" );count ++;} System.out.println(); part = 3; //5次攻击后,由部队3进行下一轮攻击 con3.signal(); //唤醒等待攻击的部队; } } }).start(); //第3支部队攻击线程; new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < n; i++) { lock.lock(); while(part !=3) try { con3.await(); } catch (InterruptedException e) { e.printStackTrace(); } for(int j=0;j<n;j++){System.out.print("部队:"+part+"进行第"+ count+"次攻击!");int fightTime = 0;fightTime = 1000;System.out.println("攻击"+fightTime/1000+" 秒结束 >>>>> 本次攻击完成" );count ++;} System.out.println(); part = 1; //5次攻击后,由部队1进行下一轮攻击 con1.signal(); //唤醒等待攻击的部队; } } }).start();}}
0 0
- 采用JDK并发包提供的Lock, Condition等类的相关方法控制多线程.
- java多线程学习笔记——concurrent包的一些类(Lock 和Condition)
- Java并发---synchronized、Lock、Condition的区别
- Java多线程编程--(7)学习Java5.0 并发编程包--Lock & Condition
- Lock的Condition使用
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- Java 多线程(四)线程间的通信jdk1.5中Lock,Condition----各种锁的相关详细概念
- Java多线程(五) ReentrantLock、Lock和Condition的用法
- JAVA多线程-Lock的使用(一)-ReentrantLock与Condition
- Java多线程编程4--Lock的使用--重入锁(ReentrantLock)、Condition
- Java多线程 之 lock与condition的使用(十四)
- java多线程-Lock与Condition接口的使用详解
- Java多线程编程4--Lock的使用--相关方法
- JDK提供的获取类的相关属性的方法Introspector
- jdk源码解读-并发包-Lock-ReentrantReadWriteLock(1)-整体介绍以及读锁的lock 和 unlock 解析
- jdk源码解读-并发包-Lock-ReentrantLock(1)--lock()与unlock()方法走读
- JAVA多线程-Lock的使用(三)-Lock与Condiition相关的方法
- Lock中Condition的实现
- 《数据结构导论之时间复杂度》
- Long
- rsync 3.1.1源码编译安装配置
- vue.js的事件处理器v-on:click
- 敬请期待……
- 采用JDK并发包提供的Lock, Condition等类的相关方法控制多线程.
- 2.6 ListView Item多布局的实现
- 敬请期待……
- centos 7 安装caffe(CPU版)
- 可变长数组
- 敬请期待……
- Failed to load JavaHL Library解决方法
- 敬请期待……
- HTTP请求和响应