zoukankan      html  css  js  c++  java
  • 两个线程交替运行——使用synchronized+wait+notify实现

    public class ExecuteThread {
    private static Object obj = new Object();
    private static boolean flag; // 默认是false

    public static void main(String[] args) {
    new Thread(new Runnable() { // 匿名内部类
    @Override
    public void run() {
    synchronized (obj) {
    for (int i = 0; i < 10; i++) {
    if (flag) {
    try {
    obj.wait(); // 释放锁进入等待队列(等待池),线程2获取到对象锁
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    obj.notify(); // 唤醒等待队列中线程2进入锁池竞争对象锁
    flag = true;
    System.out.println(Thread.currentThread().getName() + "--->" + i);
    }
    }
    }
    }, "thread1").start();
    new Thread(new Runnable() {
    @Override
    public void run() {
    synchronized (obj) {
    for (int i = 0; i < 10; i++) {
    if (!flag) {
    try {
    obj.wait(); // 释放锁进入等待队列(等待池),线程1获取到对象锁
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    obj.notify(); // 唤醒等待队列中线程1进入锁池竞争对象锁
    flag = false;
    System.out.println(Thread.currentThread().getName() + "--->" + i);
    }
    }
    }
    }, "thread2").start();
    }
    }
  • 相关阅读:
    java 前端--Jquery表单验证
    java基础--IO流(3)
    工具的使用与安装--myeclipse项目导入eclispse中的设置
    洛谷 P2697 宝石串
    洛谷 P2145 [JSOI2007]祖码
    洛谷 P1005 矩阵取数游戏
    洛谷 P3205 [HNOI2010]合唱队
    洛谷 P1220 关路灯
    POJ 2152 Fire
    洛谷 P1043 数字游戏
  • 原文地址:https://www.cnblogs.com/coderxiaobai/p/12887375.html
Copyright © 2011-2022 走看看