剖析Java线程之间的通信

案例

两个线程规律交替输出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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值