两个线程交替打印0-9之间数字,使用Condition

两个线程交替打印0-9之间数字,使用Condition,第1张

两个线程交替打印0-9之间数字,使用Condition

两个线程交替打印0-9之间数字,使用Condition

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class ConditionDemo {
    static private ReentrantLock lock = new ReentrantLock();
    static private Condition condition = lock.newCondition();
    static AtomicInteger atomicInteger = new AtomicInteger(0);

    public static void main(String[] args) {
        new Thread(new Task()).start();
        new Thread(new Task()).start();
    }

    static class Task implements Runnable{
        @Override
        public void run() {
            lock.lock();
            try {
                while (atomicInteger.get() < 10){
                    System.out.println(Thread.currentThread().getName()+"_print:"+atomicInteger.getAndIncrement());
                    condition.signal();
                    try {
                        // 防止一个线程执行结束,另一个线程没有被唤醒
                        condition.await(500, TimeUnit.NANOSECONDS);
                    } catch (InterruptedException e) {
                    }
                }
            }finally {
                System.out.println(Thread.currentThread().getName()+"_end...");
                lock.unlock();
            }
        }
    }
}

打印效果如下

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5637943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存