A、B两个线程交替打印1 -- 100
方案一:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; /**
* created by cjy
* desc: lock and condition
*/
public class Test100_01 { private static Lock lock = new ReentrantLock();
private static Condition condition1 = lock.newCondition();
private static Condition condition2 = lock.newCondition(); public static void main(String[] args) { // thread 1
Thread t1 = new Thread(() -> {
for (int i = 1; i <= 999; i += 2) {
lock.lock();
try {
System.out.println("current:" + i);
condition1.await();
condition2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock();
}
}); // thread 2
Thread t2 = new Thread(() -> {
for (int i = 2; i <= 1000; i += 2) {
lock.lock();
try {
System.out.println("current:" + i);
condition1.signal();
condition2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock(); }
}); t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
}
} 方案二:
/**
* created by cjy
* desc: synchronized wait notify
*/
public class Test100_02 { private static Object object = new Object();
private static boolean isFlag = false;
public static void main(String[] args) { Thread t1 = new Thread(() -> {
for (int i = 1; i <= 999; i+=2) {
synchronized (object) {
if (!isFlag) {
System.out.println("current:" + i);
isFlag = true;
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
} object.notify();
}
}
}
}); Thread t2 = new Thread(() -> {
for (int i = 2; i <= 1000; i+=2) {
synchronized (object) {
if (isFlag) {
isFlag = false;
System.out.println("current:" + i);
object.notify(); try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}); t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
}
}
A、B两个线程交替打印1 -- 100的更多相关文章
- 多线程下,两个线程交替打印0 -100,使用wait()和notify()
多线程下,两个线程交替打印0 -100,使用wait()和notify() public class ThreadTest{ private static final Object lock = ne ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- [Java并发]实现两个线程交替打印奇偶数(volatile+yield实现)
解题思路 实现一个类OddEven 有一个打印奇数的方法,有一个打印偶数的方法. 类中有一个volatile变量 ,用来控制当前状态是该哪个方法打印. 方法中打印每个数前首先判断volatile变量的 ...
- 两个线程交替打印奇偶数【Lock版】
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- Java并发 两个线程交替执行和死锁
今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...
- 使用Java实现三个线程交替打印0-74
使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...
- java实现线程交替打印1-52和A-Z
题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交替打印,输出结果为12A34B...........5152Z. 3.请用多线程方式实现. 实现思路:通过锁(s ...
- 简单的线程同步问题:两个线程交替执行N次【Synchronized、Lock、ArrayBlockingQueue】
方法一:传统的线程方法import org.apache.log4j.Logger; /** * 两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象.<br/> * ...
- Thread--两线程交替打印
package t3.copy; public class ThreadA extends Thread { private Object lock; public ThreadA(Object lo ...
随机推荐
- 【awk】用awk将Fasta文件序列变成一行
awk: awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" &q ...
- my work
Dad, what's your first job? How did you achieved?
- 如何对tcp流认证并加密
一个场景:目前越来越多的业务需要远程读写Redis,而Redis 本身不提供 SSL/TLS 的支持,在需要安全访问的环境下. 这时候就需要额外的手段进行加密认证,这里有两种手段:spiped 和 n ...
- java截取2个指定字符之间的字符串
/** * 截取字符串str中指定字符 strStart.strEnd之间的字符串 * * @param string * @param str1 * @param str2 * @return */ ...
- js之数组操作
js之数组操作 前言 本文主要从应用来讲数组api的一些操作,如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.排序.对象和数组的转化等.(文章摘自:https://segmentfault ...
- .babelrc和babel.config.js的相同配置不能合并
项目内部已经有了babel的配置文件babel.config.js module.exports = { presets: ["@vue/app"], }; 然后由于要按需引入el ...
- js中的所有鼠标事件 键盘事件
https://www.cnblogs.com/torchstar/p/null.html
- 详解Python的装饰器
Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...
- useBean
Part.java package part; public class Part { String pName;//零件名字 String pColor;//零件颜色 int pQuantity;/ ...
- Hadoop之运行环境搭建
一.虚拟机环境准备 1.克隆虚拟机 2.修改克隆虚拟机静态IP 3.修改主机名 4.关闭防火墙 5.创建hadoop用户 6.配置hadoop用户具有root权限 7.在/opt 目录下创建文件夹 1 ...