【Java多线程】Java两个线程轮询打印A1B2C3
时间:2021-09-09
本文章向大家介绍【Java多线程】Java两个线程轮询打印A1B2C3,主要包括【Java多线程】Java两个线程轮询打印A1B2C3使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.synchronized+wait()+notify()方式
static Object object = new Object(); public static void main(String[] args) { char[] num = "1234567".toCharArray(); char[] str = "ABCDEFG".toCharArray(); new Thread(() -> { synchronized (object) { for (char c : str) { try { System.out.println(Thread.currentThread().getName()+" = " + c); object.wait(); object.notify(); } catch (Exception e) { e.printStackTrace(); } } } }, "t1").start(); new Thread(() -> { synchronized (object) { for (char c : num) { try { System.out.println(Thread.currentThread().getName()+" = " + c); object.notify(); object.wait(); } catch (Exception e) { e.printStackTrace(); } } } }, "t2").start();
2.Lock+Condition 、await()+signal()
static Lock lock = new ReentrantLock(); static Condition condition = lock.newCondition(); public static void main(String[] args) { char[] num = "1234567".toCharArray(); char[] str = "ABCDEFG".toCharArray(); new Thread(()->{ lock.lock(); try { for (char c : str) { System.out.println(Thread.currentThread().getName()+" = " + c); condition.await(); condition.signal(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } },"t1").start(); new Thread(()->{ lock.lock(); try { for (char c : num) { System.out.println(Thread.currentThread().getName()+" = " + c); condition.signal(); condition.await(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } },"t2").start(); }
3.AtomicInteger原子类
static AtomicInteger thredNo=new AtomicInteger(1); public static void main (String[] args){ char[] num="1234567".toCharArray(); char[] str="ABCDEFG".toCharArray(); new Thread(()->{ for (char c : num) { //如果不是1就一直返回空,直到运行打印,打印完之后把原子对象变成2 while (thredNo.get()!=1){} System.out.println(c); thredNo.set(2); } },"t1").start(); new Thread(()->{ for (char c : str) { //如果不是2就一直返回空,直到运行打印,打印完之后把原子对象变成1 while (thredNo.get()!=2){} System.out.println(c); thredNo.set(1); } },"t1").start(); }
4.LockSupport
static Thread t1 ; static Thread t2 ; public static void main(String[] args) { char[] num = "1234567".toCharArray(); char[] str = "ABCDEFG".toCharArray(); t1 = new Thread(()->{ for (char c : num) { System.out.println(Thread.currentThread().getName()+"::::"+c); java.util.concurrent.locks.LockSupport.unpark(t2); java.util.concurrent.locks.LockSupport.park(); } },"t1"); t2 = new Thread(()->{ for (char c : str) { java.util.concurrent.locks.LockSupport.park(); System.out.println(Thread.currentThread().getName()+"::::"+c); java.util.concurrent.locks.LockSupport.unpark(t1); } },"t2"); t1.start(); t2.start(); }
原文地址:https://www.cnblogs.com/aioe/p/15246534.html
- [接口测试 - 基础篇] 07 来来来,一起读写excel玩玩之一
- 时间序列分析算法【R详解】
- 【专知-关关的刷题日记16】Leetcode 88. Merge Sorted Array
- [接口测试 - 基础篇] 06 好吧也来解析下html
- [接口测试 - 基础篇] 05 好讨厌的xml解析
- 【专知-关关的刷题日记17】Leetcode 268. Missing Number
- 【专知-关关的刷题日记18】Leetcode 35. Search Insert Position
- [接口测试 - http.client篇] 15 常用API说明及基本的示例
- [接口测试 - http.client篇] 14 源码初探及其工作机制分析
- 【专知-关关的刷题日记19】Leetcode 118. Pascal's Triangle
- 每周学点大数据 | No.3算法设计与分析理论
- HDU 1874 畅通工程续【Floyd算法实现】
- 接口测试 | 21 基于flask弄个restful API服务出来
- 数论部分第二节:埃拉托斯特尼筛法 埃拉托斯特尼筛法
- 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 文档注释
- python进程池:multiprocessing.pool
- AttributeError: 'list' object has no attribute 'keys'
- raise ValueError("Cannot convert {0!r} to Excel".format(value))
- ImportError: cannot import name 'Process' from 'multiprocessing'
- mac卸载mysql
- 不可错过的Webpack核心知识点
- APP+Web混合全局版的几种布署方法
- 关于合并pdf文件出现的问题
- Python中的with是测试常用到的资源打开利
- python批量运行py文件
- beautifulsoup的使用
- PWN:House Of Einherjar
- 2.用Python套用Excel模板,一键完成原亮样式
- Vmware Centos7 配置静态 ip 和 使宿主机和虚拟机互相 ping 通
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?