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();
    }
    }
  • 相关阅读:
    GUID概念
    某猿的饭局
    SVN切分支步骤
    OSX:设置用户默认浏览器
    值得推荐的android开发框架简单介绍
    用实力让情怀落地!阅兵前线指挥车同款电视TCL&#160;H8800受捧
    Excel查询序列所相应的值-vLoopup函数,求比例分子改变但分母不变
    CSS3制作W3cplus的关注面板
    Spring MVC框架实例
    @property 和@synthesize
  • 原文地址:https://www.cnblogs.com/cr1719/p/9339887.html
Copyright © 2011-2022 走看看