zoukankan      html  css  js  c++  java
  • A、B两个线程交替打印1 -- 100

    方案一:
    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();
    }
    }
  • 相关阅读:
    STM32 HAL库学习笔记
    嵌入式Linux学习笔记
    AVR_Interrupt
    shutdown命令用法
    ULINK2 USB电脑无法识别(连接电脑后,设备管理器显示未知设备)
    MDK中编译程序后Program Size详解
    Keil(MDK-ARM)系列教程(三)_工程目标选项配置(Ⅰ)
    第48章 MDK的编译过程及文件类型全解
    Do not access Object.prototype method ‘hasOwnProperty’ from target object no-prototype-builtins
    让vscode按照eslint进行格式化
  • 原文地址:https://www.cnblogs.com/cr1719/p/9339887.html
Copyright © 2011-2022 走看看