美文网首页
交替打印奇偶数

交替打印奇偶数

作者: 叶雨文 | 来源:发表于2018-12-27 22:15 被阅读0次

/**

* 交替打印奇偶数

* 用condition来做信号量实现奇数偶数的交替打印

* @author wanghao

* @date 2018年12月25日

*/

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class NumberPrint {

private int index;

private Lock lock = new ReentrantLock();

private Condition oddConditon = lock.newCondition();

private Condition evenCondition = lock.newCondition();

public void printOdd() throws InterruptedException {

lock.lock();

try {

while (index < 1000) {

if (index % 2 == 0)

oddConditon.await();

System.out.println(Thread.currentThread().getName() + ":" + index++);

evenCondition.signal();

}

} finally {

lock.unlock();

}

}

/**

* 举例。如果到了999,偶数线程await,奇数线程不论之前被signal之后抢占到了锁还是evenCondition.await让出了锁,都能获得执行的权限,打印1000

* @throws InterruptedException

*/

public void printEven() throws InterruptedException {

lock.lock();

try {

while (index < 1000) {

if (index % 2 == 1)

evenCondition.await();

System.out.println(Thread.currentThread().getName() + ":" + index++);

oddConditon.signal();

}

} finally {

lock.unlock();

}

}

public static void main(String[] args) {

NumberPrint numberPrint = new NumberPrint();

Thread thread1 = new Thread(() -> {try {

numberPrint.printOdd();

} catch (InterruptedException e) {

e.printStackTrace();

}});

thread1.setName("odd thread");

Thread thread2 = new Thread(() -> {try {

numberPrint.printEven();

} catch (InterruptedException e) {

e.printStackTrace();

}});

thread2.setName("eve thread");

thread2.start();

thread1.start();

}

}

相关文章

  • 交替打印奇偶数

    /** * 交替打印奇偶数 * 用condition来做信号量实现奇数偶数的交替打印 * @author wang...

  • 交替打印奇偶数

    public class PrintNumber { }

  • 线程交替打印奇偶数

        面试经常性问到要求手写线程交替打印奇偶数,其实就是考察对线程的灵活控制,本次就用2种方式交替打印奇偶数。并...

  • LOCK--交替打印奇偶数

    两个线程交替打印奇偶数 public class TwoThreadLock { static Locklock ...

  • 一道线程面试题

    2个线程交替打印1-100内的数,线程A打印偶数,线程B打印奇数 打印结果如下: 实现代码

  • 双线程交替打印奇偶数

    如何使用两个线程交替打印奇偶数? 这是一道经典的面试题,与生产消费者模型类似,都是在使用锁控制两个线程的线程安全问...

  • N个线程交替输出的问题

    1、两个不同的线程交替打印Kao、La。2、两个线程,一个打印100内的奇数一个打印100内的偶数,交替执行。 N...

  • java两个线程交替打印奇偶数

    引言 java面试中经常会遇到这个问题,如何用两个线程交替打印奇偶数。线程A打印1,线程B打印2,线程A打印3,线...

  • 多线程同步交替打印奇偶数

    public class PrintSys{ /** * 定义线程 * @param str ...

  • 两个线程交替打印奇偶数

    拿到锁,我们就打印 打印完,唤醒其他线程,自己就休眠 新建2个线程1个只处理偶数,第二个只处理奇数(用位运算)用s...

网友评论

      本文标题:交替打印奇偶数

      本文链接:https://www.haomeiwen.com/subject/hqqjlqtx.html