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();
    }
    }
  • 相关阅读:
    U盘禁用工具1.3
    《中文专业论文写作概论》笔记
    基于WAP1.0的手机论坛网站系统
    销售统计SQL
    移动如何保护个人开发者的合法权益?
    c#使用winnet检测网络连接状况
    HBASE客户端的一些参数设置
    代理模式
    使用Eclipse+Axis2生成webservice
    java多线程的理解
  • 原文地址:https://www.cnblogs.com/cr1719/p/9339887.html
Copyright © 2011-2022 走看看