zoukankan      html  css  js  c++  java
  • 两线程交替打印单双数

    创建A,B两个线程交替打印1-100,A线程打印单数,B线程打印双数

    package com.advance.code.learn.day0226;
    
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * 两个线程交替打印 1-100的数
     */
    public class TurnedPrintThread {
    
        public static void main(String[] args) {
    
            PrinterHandler printerHandler = new PrinterHandler();
    
            new Thread(() -> {
                for (int i = 1; i <= 100; i += 2) {
                    printerHandler.printer(i, true);
                }
            }, "AAAAAA").start();
    
            new Thread(() -> {
                for (int i = 2; i <= 100; i += 2) {
                    printerHandler.printer(i, false);
                }
            }, "BBBBBB").start();
    
        }
    
    }
    
    class PrinterHandler{
        //用于标记当前线程 true是A线程  flag是B线程
        private boolean flag = true;
        private ReentrantLock lock = new ReentrantLock();
        Condition condition1 = lock.newCondition();
        Condition condition2 = lock.newCondition();
    
        public void printer(int num, boolean flagThread){
            lock.lock();
            try {
                while (flagThread != flag){
                    if(flagThread){
                        condition1.await();
                    }else{
                        condition2.await();
                    }
                }
    
                System.out.println(Thread.currentThread().getName() + "打印:	"+num);
    
                if(flagThread){
                    flag = false;
                    condition2.signal();
                }else{
                    flag = true;
                    condition1.signal();
                }
    
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }
    
  • 相关阅读:
    图解插入排序--直接插入排序
    在项目中代替DevExpress(一)
    java web servlet
    一元夺宝项目设计(上)
    一元夺宝项目设计(中)
    一元夺宝项目设计(下)
    ORM之四:调用入口与调用示例
    ORM之三:DbProvider与DbFactory
    ORM之二:核心接口与扩展操作
    ORM之一:适合我的ORM
  • 原文地址:https://www.cnblogs.com/advanceBlog/p/14460421.html
Copyright © 2011-2022 走看看