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();
    }
    }
  • 相关阅读:
    Lua_第 20 章 IO库
    maven具体解释之坐标与依赖
    用python做自己主动化測试--对Java代码做单元測试 (1)
    OSG粒子系统应用:雨雪效果
    Snort:Barnyard2+MySQL+BASE 基于Ubuntu 14.04SNORT
    shiro高速入门
    解决Cocos项目中遇到的fatal error c1083(无法打开包含文件)
    解决TIME_WAIT过多造成的问题
    Web后端语言模拟http请求(带username和password)实例代码大全
    Python
  • 原文地址:https://www.cnblogs.com/cr1719/p/9339887.html
Copyright © 2011-2022 走看看