java多线程交替打印_java实现多线程交替打印
本文实例为大家分享了java实现多线程交替打印的具体代码,供大家参考,具体内容如下
notify+wait实现
import org.junit.Test;
import java.util.concurrent.*;
public class TestThreadLocal {
Object o = new Object();
CountDownLatch c=new CountDownLatch(2);
@Test
public void vvvvvvvv() throws InterruptedException {
Thread t1 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 26; i++) {
synchronized (o) {
System.out.print((char) (65 + i));
o.notify();
try {
if(i<25)o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
c.countDown();
}
};
Thread t2 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 26; i++) {
synchronized (o) {
System.out.print(1 + i);
o.notify();
try {
if(i<25)o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
c.countDown();
}
};
t1.start();
t2.start();
//t1.join();
//t2.join();
c.await();
}
}
A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26
t2可能先执行,notify(只随机唤醒一个 wait 线程)改成notifyAll(唤醒所有 wait 线程)更好。
这两个方法只唤醒,被唤醒的线程处于runnable状态。想交替执行,需要负责唤醒的线程自己阻塞。
LockSupport实现
import org.junit.Test;
import java.util.concurrent.*;
import java.util.concurrent.locks.LockSupport;
public class TestThreadLocal {
CountDownLatch c=new CountDownLatch(2);
Thread t1 ,t2;
@Test
public void vvvvvvvv() throws InterruptedException {
t1 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 26; i++) {
System.out.print((char) (65 + i));
LockSupport.unpark(t2);
LockSupport.park();
}
c.countDown();
}
};
t2 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 26; i++) {
LockSupport.park();
System.out.print(1+i);
LockSupport.unpark(t1);
}
c.countDown();
}
};
t1.start();
t2.start();
//t1.join();
//t2.join();
c.await();
}
}
unpark调用时,如果当前线程还未进入park,则许可为true;
park调用时,判断许可是否为true,如果是true,则继续往下执行;如果是false,则等待,直到许可为true。
如果t2先执行,会park让t1先执行。如果t1先执行,打印后unpark t2,保证两个线程不会同时阻塞。
如果t2的LockSupport.park()和System.out.print(1+i)交换位置,可能出现t2连续打印两次的情况。
即t1打印后,执行unpartk(t2)前t2打印一次,然后t1 unpark t2后t2抢在t1前再打印一次。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。
原文链接:https://blog.csdn.net/weixin_43292547/article/details/109955789
java多线程交替打印_java实现多线程交替打印相关推荐
- java同时启动多个 无法打印_java实现多线程交替打印两个数
本文实例为大家分享了java实现多线程交替打印两个数的具体代码,供大家参考,具体内容如下 方法1.使用wait和notify package com.thread; public class T01 ...
- java多线程中方法_java中多线程 - 多线程中的基本方法
介绍一下线程中基本的方法使用 线程睡眠sleep() Thread.sleep(毫秒);我们可以通过sleep方法设置让线程睡眠.可以看到sleep是个静态方法 public static nativ ...
- java游戏输赢统计_java利用多线程和Socket实现猜拳游戏
本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...
- java多线程常用面试_java的多线程常见面试题
并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...
- java 多线程的使用_Java的多线程1:线程的使用
概述 public enumState {/*** Thread state for a thread which has not yet started.*/NEW,/*** Thread stat ...
- java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...
java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...
- java线程不能重复_Java中多线程重复启动
标签: 在面试时候经常被问到多线程的相关问题: 今天在测试的时候发现下面的代码会抛出异常: java.lang.IllegalThreadStateException public static vo ...
- java 线程 状态 图_Java提高——多线程(一)状态图
操作系统中的进程和线程的概念 进程是指一个内存运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程,比如windows下的一个运行的应用程序.exe就是一个进程. 线程是指进 ...
- java线程的优点_Java使用多线程的优势
Java使用多线程的优势 如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能.那么Java使用多线程的优势具体有哪些呢,一起来了解一下! 1.发挥多处理器的强大能力 现 ...
最新文章
- php从mysql 表中提取图片数据并显示
- VS .NET(C#)四舍五入方法(转)
- 学校开展计算机培训活动,计算机学院学习筑梦班开展义务清扫机房活动
- ThinkJs笔记琐碎
- JAVA 堆栈 堆 方法区 解析
- oftc注册服务器占用,golang服务器程序运行过程中崩溃,报错:fatal error: runtime: out of memory...
- 《Raspberry Pi用户指南》——2.3 Debian简介
- 科研|本科来自普通二本的博士3年迎来2篇Nature,创造校史!
- 深入浅出OOP(一): 多态和继承(早期绑定/编译时多态)
- (完美)华为畅玩7A AUM-AL00的Usb调试模式在哪里打开的步骤
- dell笔记本驱动安装失败_如何以正确的顺序重新安装驱动程序 | Dell 中国
- win10系统服务器不能创建对象,教你win10系统activex部件不能创建对象的解决教程...
- 拓展练习--find查找、打包压缩、服务器、磁盘挂载
- 利用爬虫获得疫情信息,并存入表格
- 电信ZNHG60光猫信息虚标
- Hive beeline详解
- 大面积无线网络覆盖5大方案,满足不同场所的实际需求
- [渝粤题库]西北工业大学材料力学(更新)
- oracle删除大量数据
- 写一个freeRTOS
热门文章
- sql server如何输出排序序号_Group by中子查询order by排序失效问题分析
- ip打包后如何加入 xilinx_科普!插上USB设备后电脑是怎么识别的呢?
- python中set函数作用如何自己用代码实现_Python进阶开发之元类编程
- 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
- c语言软件电脑下载文件,求C语言头文件下载?
- 一棵树的生物量怎么算_宾利的眼镜盒价值2万,算坑人吗?网友:良心产品,不坑穷人...
- Java对象垃圾回收调用,JVM垃圾回收之哪些对象可以被回收
- tensorflow权重初始化
- 基于PCA的人脸特征抽取
- 掌控谈话~拔刺(说出你对我的指控)