剖析Java线程之间的通信

作者: Java酸不酸 | 来源:发表于2019-04-27 15:56 被阅读4次

案例

两个线程规律交替输出1,2,3,4,5,6....10

需求分析

  • 线程间通信(控制线程的切换,也叫等待唤醒机制(A - 锁 - B))
    • notify(),唤醒同一锁的某个线程
    • notifyAll(),唤醒同一锁的全部线程
    • wait(),停止当前线程,释放锁
    • wait(long timeout),等到特定的时间,自动停止当前线程,释放锁

代码

  • 定义一把公共锁
public class MyLock {
    public static final Object LOCK = new Object();
}
  • 定义两个线程,分别为:ThreadOne、ThreadTwo
// 线程一
public class ThreadOne extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 10; i += 2) {
            synchronized (MyLock.LOCK) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
                MyLock.LOCK.notify();
                try {
                    MyLock.LOCK.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

// 线程二
public class ThreadTwo extends Thread {
    @Override
    public void run() {
        for (int i = 2; i <= 10; i += 2) {
            synchronized (MyLock.LOCK) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
                MyLock.LOCK.notify();
                try {
                    MyLock.LOCK.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 测试类
public class Test {
    public static void main(String[] args) {
        new ThreadOne().start();
        new ThreadTwo().start();
    }
}
  • 结果
Thread-0: 1
Thread-1: 2
Thread-0: 3
Thread-1: 4
Thread-0: 5
Thread-1: 6
Thread-0: 7
Thread-1: 8
Thread-0: 9
Thread-1: 10

相关文章

  • 线程间通信剖析——Java进阶

    Java线程间通信剖析 本文将介绍常用的线程间通信工具CountDownLatch、CyclicBarrier和P...

  • 剖析Java线程之间的通信

    案例 两个线程规律交替输出1,2,3,4,5,6....10 需求分析 线程间通信(控制线程的切换,也叫等待唤醒机...

  • 2 Java内存模型

    java中线程通信用的是共享内存模型,java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。 Java...

  • Java内存模型(JMM)

    线程之间的通信机制有两种:共享内存和消息传递。Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进...

  • 3-Java内存模型

    1.Java内存模型的基础 ①并发编程模型的两个关键问题 线程之间如何通信、线程之间如何同步 通信是指线程之间以何...

  • Java 线程通信之 wait/notify 机制

    前言 Java 线程通信是将多个独立的线程个体进行关联处理,使得线程与线程之间能进行相互通信。比如线程 A 修改了...

  • 第二节、Handler消息机制

    一、为什么要设计handler Java 多线程通信 Java 中有很多种方法实现线程之间相互通信访问数据,大概先...

  • 重学Java系列-2. JVM内存模型 & 类加载机制

    Java内存模型 & JVM内存分区 线程之间的通信 在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。...

  • 3. Java内存模型

    1. Java内存模型基础 1.1 并发编程的两个关键问题 线程之间如何通信, 通信是指线程之间如何交换信息, 一...

  • 07 JMM

    1 JMM基础 线程之间如何通信及线程之间如何同步共享内存 java线程之间共享程序的公共状态,通过写-读内存中的...

网友评论

    本文标题:剖析Java线程之间的通信

    本文链接:https://www.haomeiwen.com/subject/knzjgqtx.html