多线程之——wait/notify

简介: 多线程之——wait/notify

package thread.wait;
public class WaitTest {
    public static void main(String[] args) {
        PrintService printService = new PrintService();
        new Thread(printService::printChar).start();
        new Thread(printService::printNumber).start();
    }
}
class PrintService {
    private int number = 0;
    public PrintService() {}
    public void increment() {
        this.number = number + 1;
    }
    // 等待唤醒机制 wait,notify 必须和锁一起使用
    // 这是因为 等待还是唤醒是根据condition决定的 并且状态在线程间需要同步改变(假如两个线程看到的条件处于不一致状态 必然会产生混乱 那么根据条件来决定是否阻塞还是唤醒 就没有意义了)
    // 而使用同一把对象锁(就可以保证同一时间只能有一个线程修改条件) 线程间观测到的条件自然就是一致的
    public synchronized void printChar() {
        for (int i = 1; i <= 52; i+=2) {
            if(number % 2 != 0) { //跟 printNumber 条件相反
                try {
                    wait();
                } catch (InterruptedException interruptedException) {
                    interruptedException.printStackTrace();
                }
            }
            System.out.println(i);
            System.out.println(i + 1);
            increment();//改变条件
            notify();
        }
    }
    public synchronized void printNumber() {
        for (int i = 65; i <= 90; i++) {
            if(number % 2 == 0) {
                try {
                    wait();
                } catch (InterruptedException interruptedException) {
                    interruptedException.printStackTrace();
                }
            }
            System.out.println((char) i);
            increment();
            notify();
        }
    }
}

题目:创建两个线程, 交替打印数字和英文字母

12A34B56C… 52Z

目录
相关文章
|
5月前
|
监控 安全
并发编程系列教程(06) - 多线程之间通讯(wait、notify、sleep、Lock锁、Condition)
并发编程系列教程(06) - 多线程之间通讯(wait、notify、sleep、Lock锁、Condition)
32 0
|
1月前
|
Java
在多线程中sleep()和wait()的区别(详细)
在多线程中sleep()和wait()的区别(详细)
|
2月前
|
Java 调度
多线程(初阶五:wait和notify)
多线程(初阶五:wait和notify)
34 0
|
3月前
|
设计模式 安全 编译器
线程学习(3)-volatile关键字,wait/notify的使用
线程学习(3)-volatile关键字,wait/notify的使用
27 0
|
4月前
|
调度
多线程之wait&notify
多线程之wait&notify
|
4月前
|
存储 安全 Java
wait和notify实现线程之间的通信
wait和notify实现线程之间的通信
39 0
wait和notify实现线程之间的通信
|
8月前
|
Java 调度
【Java|多线程与高并发】wait和notify方法详解
在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法
|
11月前
|
数据可视化
高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
37 0
|
11月前
|
Java 调度
高并发编程-线程通信_使用wait和notify进行线程间的通信
高并发编程-线程通信_使用wait和notify进行线程间的通信
61 0
为什么线程协作的 wait() 方法需要写在循环里,你有想过吗?
那么问题是为啥这里是 while 而不是 if 呢?这个问题我最开始也想了很久,按理来说已经在 synchronized 块里面了嘛,就不需要了。这个也是我前面一直是这么认为的,直到最近看了一个 Stackoverflow 上的问题才对这个问题有了比较深入的理解。 试想我们要试想一个有界的队列。那么常见的代码可以是这样: