• java多线程题目01


    题目:两个线程交替顺序打印,一个输出正整数1到52,一个输出a-zA-Z,

    例如 - 1a2b3c4d5e6f7g8h9i10j11k12l13m14n15o16p17q18r19s20t21u22v23w24x25y26z

    27A28B29C30D31E32F33G34H35I36J37K38L39M40N41O42P43Q44R45S46T47U48V49W50X51Y52Z

    一、使用volatile

    二、使用Semaphore

    三、思路: 一个线程等待,一个线程唤醒,始终只有一个线程执行

    a. volatile

    public class NumberDemo {
        static class Inner {
            private volatile boolean flag = true;
            private int count = 1;
            private int index = 1;
    
            public synchronized void printNum() {
                try {
                    while (!flag) {
                        this.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.print(count++);
                flag = false;
                this.notify();
            }
    
            public synchronized void printChar() {
                try {
                    while (flag) {
                        this.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (index < 27) {
                    System.out.print((char) (index + 'a' - 1));
                } else {
                    System.out.print((char) (index + 'A' - 27));
                }
                index++;
                flag = true;
                this.notify();
            }
        }
    
        public static void main(String[] args) {
            Inner inner = new Inner();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 52; i++) {
                        inner.printNum();
                    }
                }
            }).start();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 52; i++) {
                        inner.printChar();
                    }
                }
            }).start();
        }
    }
    

      b. Semaphore

    public class NumberSemaphoreDemo {
    
        static class Inner {
    
            private Semaphore semaphore = new Semaphore(1);
    
            private int count = 1;
            private int index = 1;
    
            public synchronized void printNum() {
                try {
                    semaphore.acquire();
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.print(count++);
                semaphore.release();
                this.notify();
            }
    
            public synchronized void printChar() {
                try {
                    semaphore.acquire();
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (index < 27) {
                    System.out.print((char) (index + 'a' - 1));
                } else {
                    System.out.print((char) (index + 'A' - 27));
                }
                index++;
                semaphore.release();
                this.notify();
            }
        }
    
        public static void main(String[] args) {
            NumberDemo.Inner inner = new NumberDemo.Inner();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 52; i++) {
                        inner.printNum();
                    }
                }
            }).start();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 52; i++) {
                        inner.printChar();
                    }
                }
            }).start();
        }
    }
    

      

  • 相关阅读:
    JDBC事务--软件开发三层架构--ThreadLocal
    SQL查询-约束-多表
    SQL基本语法总结
    DDL
    ZOJ 1178 Booklet Printing
    ZOJ 1107 FatMouse and Cheese
    ZOJ 1099 HTML
    ZOJ 1041 Transmitters
    ZOJ 1095 Humble Numbers
    ZOJ 1105 FatMouse’s Tour
  • 原文地址:https://www.cnblogs.com/maduar/p/10605674.html
Copyright © 2020-2023  润新知