zoukankan      html  css  js  c++  java
  • 经典多线程问题(四)-轮流打印字母和数字

    1.0 synchronized

    package com.example.demo.study.questions;
    
    /**
     * @ClassName Question13
     * @Description: 经典多线程问题-轮流打印字母和数字
     * @Author xtanb
     * @Date 2019/10/22
     * @Version V1.0
     **/
    public class Question13 {
        private volatile boolean flag = true;
        private int count = 1;
    
        public synchronized void printNum(){
            while (!flag){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.print(2*count-1);
            System.out.print(2*count);
            flag = false;
            this.notify();
        }
    
        public synchronized void printABC(){
            while (flag){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.print((char)('A'+count-1));
            count++;
            flag = true;
            this.notify();
        }
    
    
        public static void main(String[] args) {
            Question13 question13 = new Question13();
            new Thread(()->{
                for(int i=0;i<26;i++){
                    question13.printNum();
                }
            }).start();
            new Thread(()->{
                for(int i=0;i<26;i++){
                    question13.printABC();
                }
            }).start();
        }
    }

    2.0 ReentranLock

    package com.example.demo.study.questions;
    
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * @ClassName Question14
     * @Description: 经典多线程问题-轮流打印字母和数字
     * @Author xtanb
     * @Date 2019/10/22
     * @Version V1.0
     **/
    public class Question14 {
    
        private volatile boolean flag = true;
        private Lock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
        private int num = 1;
    
        public void printNum(){
            try {
                lock.lock();
                while (!flag){
                    try{
                        condition.await();
                    }catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                System.out.print(num*2-1);
                System.out.print(num*2);
    
                flag = false;
                condition.signal();
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    
        public void printABC(){
            try {
                lock.lock();
                while (flag){
                    try{
                        condition.await();
                    }catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                System.out.print((char)('A'+num-1));
                num++;
                flag = true;
                condition.signal();
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    
        public static void main(String[] args) {
            Question14 question14 = new Question14();
            new Thread(()->{
               for(int i=0;i<26;i++){
                   question14.printNum();
               }
            }).start();
            new Thread(()->{
                for(int i=0;i<26;i++){
                    question14.printABC();
                }
            }).start();
        }
    }
  • 相关阅读:
    信号与系统04 离散时间傅里叶变换
    什么是吉布斯现象
    部分分式展开
    常见的傅里叶变换对
    微分运算的时域扩展
    动态库和静态库的制作与使用 【转载】原文链接https://www.cnblogs.com/WindSun/p/11287927.html
    派生访问说明符
    自定义异常类
    C++虚函数
    Linux知识点
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11718137.html
Copyright © 2011-2022 走看看