方案一:
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的更多相关文章

  1. 多线程下,两个线程交替打印0 -100,使用wait()和notify()

    多线程下,两个线程交替打印0 -100,使用wait()和notify() public class ThreadTest{ private static final Object lock = ne ...

  2. 使用Java线程并发库实现两个线程交替打印的线程题

    背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...

  3. [Java并发]实现两个线程交替打印奇偶数(volatile+yield实现)

    解题思路 实现一个类OddEven 有一个打印奇数的方法,有一个打印偶数的方法. 类中有一个volatile变量 ,用来控制当前状态是该哪个方法打印. 方法中打印每个数前首先判断volatile变量的 ...

  4. 两个线程交替打印奇偶数【Lock版】

    import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...

  5. Java并发 两个线程交替执行和死锁

    今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...

  6. 使用Java实现三个线程交替打印0-74

    使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...

  7. java实现线程交替打印1-52和A-Z

    题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交替打印,输出结果为12A34B...........5152Z. 3.请用多线程方式实现. 实现思路:通过锁(s ...

  8. 简单的线程同步问题:两个线程交替执行N次【Synchronized、Lock、ArrayBlockingQueue】

    方法一:传统的线程方法import org.apache.log4j.Logger; /** * 两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象.<br/> * ...

  9. Thread--两线程交替打印

    package t3.copy; public class ThreadA extends Thread { private Object lock; public ThreadA(Object lo ...

随机推荐

  1. C sharp #001# hello world

    饮水思源:金老师的自学网站 索引 编写一个简单的控制台程序. 日期计算的结构化编程实现 日期计算机面向对象编程实现 直接应用已有组件 1.编写一个简单的控制台程序. using System; usi ...

  2. BZOJ5279: [Usaco2018 Open]Disruption

    题目大意:给你一棵n个节点的树,这n条边称为原边,另给出m条带权值的额外边,求删去每条原边后通过给出的m额外条边变回一棵树的最小价值.题解:看完题面以为是Tarjan连通性之类的题目,冷静分析后想到是 ...

  3. 阿里云centos怎么用xshell5登陆

    第一种是用ssh,安装Xshell5   打开XShell   新建会话输入ip   选择新建的会话,点击连接,选择接受并保护,输入root,点击确定   输入密码   已经连接成功了,用Xshell ...

  4. restorecon【转】

    本文转载自:https://blog.csdn.net/sinat_36888624/article/details/6076650 estorecon命令用来恢复SELinux文件属性即恢复文件的安 ...

  5. LintCode 521.去除重复元素

    LintCode 521.去除重复元素 描述 给一个整数数组,去除重复的元素. 你应该做这些事 1.在原数组上操作 2.将去除重复之后的元素放在数组的开头 3.返回去除重复元素之后的元素个数 挑战 1 ...

  6. 极其简单的VSCode C++环境配置

    下载我打包的文件VSCode-cpp.7z.001 和 VSCode-cpp.7z.002,解压. 在系统环境变量中添加:你解压的路径\Project\.vscode\MinGW\bin. 打开你解压 ...

  7. SetForegroundWindow Win32-API not always works on Windows-7

    BIG NOTE After messing with this API for the last 2 months, the solution/s below are all not stable ...

  8. 安装vue-cli-service和webpack

    https://www.zacms.com/index.php/archives/106/ http://www.cnblogs.com/sloong/p/5584684.html

  9. 【Mac】【问题】

    [一]export: `PATH;': not a valid identifier 可能是环境变量配的有问题 一般是~/.bash_profile 多了空格或是多了$符号之类的

  10. day_其他操作符的重载

    #include <iostream> #include <stdlib.h> using namespace std; class A{ public: A(void) { ...