java并发编程应用实例
时间:2019-12-23
本文章向大家介绍java并发编程应用实例,主要包括java并发编程应用实例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习视频资料地址:
https://www.bilibili.com/video/av59548640?p=1;
网盘资料地址:
链接:https://pan.baidu.com/s/1AdZsYnFcDPqrQzQ5BTBqEw 提取码:uvks
代码示例十:
package com.juchaosoft.test; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 线程按序交替 * @author wang-xiaoming * */ public class TestAlternateABC10_01 { public static void main(String[] args) { AlternateDemo ad = new AlternateDemo(); // 三个线程同时开启,循环十次并按照线程规定顺序打印ABC new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { ad.loopA(i, 1); } } }, "A").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { ad.loopB(i, 2); } } }, "B").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { ad.loopC(i, 3); System.out.println("第" + (i + 1) + "次执行结束。。"); } } }, "C").start(); } } class AlternateDemo{ // 当前正在执行的线程的标记 private int number = 1; private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); private Condition condition3 = lock.newCondition(); public void loopA(int total, int times){ lock.lock(); try { // 1、判断线程 while(number != 1){ condition1.await(); } // 2、打印 for (int i = 0; i < times; i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + total); } // 3、结束,唤醒下一个线程 number = 2; condition2.signal(); } catch (Exception e) { Thread.currentThread().interrupt(); } finally { lock.unlock(); } } public void loopB(int total, int times){ lock.lock(); try { // 1、判断线程 while(number != 2){ condition2.await(); } // 2、打印 for (int i = 0; i < times; i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + total); } // 3、结束,唤醒下一个线程 number = 3; condition3.signal(); } catch (Exception e) { Thread.currentThread().interrupt(); } finally { lock.unlock(); } } public void loopC(int total, int times){ lock.lock(); try { // 1、判断线程 while(number != 3){ condition3.await(); } // 2、打印 for (int i = 0; i < times; i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + total); } // 3、结束,唤醒下一个线程 number = 1; condition1.signal(); } catch (Exception e) { Thread.currentThread().interrupt(); } finally { lock.unlock(); } } }
console:
A 0 0 B 0 0 B 1 0 C 0 0 C 1 0 C 2 0 第1次执行结束。。 A 0 1 B 0 1 B 1 1 C 0 1 C 1 1 C 2 1 第2次执行结束。。 A 0 2 B 0 2 B 1 2 C 0 2 C 1 2 C 2 2 第3次执行结束。。 A 0 3 B 0 3 B 1 3 C 0 3 C 1 3 C 2 3 第4次执行结束。。 A 0 4 B 0 4 B 1 4 C 0 4 C 1 4 C 2 4 第5次执行结束。。 A 0 5 B 0 5 B 1 5 C 0 5 C 1 5 C 2 5 第6次执行结束。。 A 0 6 B 0 6 B 1 6 C 0 6 C 1 6 C 2 6 第7次执行结束。。 A 0 7 B 0 7 B 1 7 C 0 7 C 1 7 C 2 7 第8次执行结束。。 A 0 8 B 0 8 B 1 8 C 0 8 C 1 8 C 2 8 第9次执行结束。。 A 0 9 B 0 9 B 1 9 C 0 9 C 1 9 C 2 9 第10次执行结束。。
原文地址:https://www.cnblogs.com/huakaiyoushi/p/12056024.html
- 【LEETCODE】模拟面试-120- Triangle
- Spring Cloud Edgware新特性之四:Zuul routes端点功能增强
- Spring Cloud Edgware新特性之三:使用配置属性自定义Feign的行为
- 碎片化 | 第四阶段-43-struts2拦截器interceptor-视频
- Spring Cloud Edgware新特性之二:如何配置Zuul的Hystrix线程池
- 碎片化 | 第四阶段-44-struts2注解使用-视频
- Spring Cloud Edgware新特性之:解决Eureka中Jersey 1.x版本过旧的问题-不使用Jersey
- 如何自定义微服务的Instance ID
- 怎样做情感分析
- Python|编写自己的类
- 碎片化 | 第四阶段-45-session为空问题解决-视频
- 以后有机会写框架用得着的
- 合并两个不相关的Git仓库
- 用 Tensorflow 建立 CNN
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Rancher 高可用部署
- 为什么Web端登录需要验证码?
- 原创分享 TiDB 的列式存储引擎是如何实现的?
- Qt音视频开发5-vlc事件订阅
- matlab中使用VMD(变分模态分解)
- TKE中挂载文件到CFS子目录
- Nginx Ingress on TKE 部署最佳实践
- 腾讯地图点聚合开发-实现地图找房功能
- 机器学习Tips:关于Scikit-Learn的 10 个小秘密
- R语言ggmap空间可视化机动车碰撞–街道地图热力图
- R语言ggmap空间可视化机动车交通事故地图
- 基于matlab的Lorenz系统仿真可视化
- 使用R语言对进行空间数据可视化
- R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
- R语言马尔可夫体制转换模型Markov regime switching