美文网首页
多线程编程练习

多线程编程练习

作者: engineer_tang | 来源:发表于2020-07-20 11:20 被阅读0次

    1. 写两个线程,其中一个线程打印1 ~ 52,另一个线程打印A ~ Z,打印顺序应该是12A34B56C ... 5152Z,完成代码实现。

    (1) 打印数字线程源码

    package com.threadtest.code;
    
    public class PrintNumThread implements Runnable {
    
        private PrintSequence printSequence;
    
        public PrintNumThread(PrintSequence printSequence) {
            this.printSequence = printSequence;
        }
    
        @Override
        public void run() {
            int i = 0;
            while(true) {
                synchronized (printSequence) {
                    if(i == 52) {
                        break;
                    }
                    if(!printSequence.isNum()) {
                        System.out.print(++i);
                        if(i % 2 == 0) {
                            printSequence.setNum(true);
                            printSequence.notify();
                        }
                    } else {
                        try {
                            printSequence.wait();
                        } catch (InterruptedException e) {
    
                        }
                    }
                }
            }
        }
    }
    

    (2) 打印字母源码

    package com.threadtest.code;
    
    public class PrintAlbumThread implements Runnable {
    
        private PrintSequence printSequence;
    
        public PrintAlbumThread(PrintSequence printSequence) {
            this.printSequence = printSequence;
        }
    
    
        @Override
        public void run() {
            char[] arr = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            int i = 0;
            while (true) {
                if(i == 26) {
                    break;
                }
                synchronized (printSequence) {
                    if(printSequence.isNum()) {
                        System.out.print(arr[i]);
                        i++;
                        printSequence.setNum(false);
                        printSequence.notify();
                    } else {
                        try {
                            printSequence.wait();
                        } catch (InterruptedException e) {
    
                        }
                    }
                }
            }
        }
    }
    
    

    (3) 共享资源源码

    package com.threadtest.code;
    
    public class PrintSequence {
    
        private boolean isNum = false;
    
        public boolean isNum() {
            return isNum;
        }
    
        public void setNum(boolean num) {
            isNum = num;
        }
    }
    
    

    (4) 测试执行源码

    package com.threadtest.code;
    
    public class PrintTest {
    
        public static void main(String[] args) {
            PrintSequence printSequence = new PrintSequence();
            PrintAlbumThread printAlbumThread = new PrintAlbumThread(printSequence);
            PrintNumThread printNumThread = new PrintNumThread(printSequence);
            new Thread(printAlbumThread).start();
            new Thread(printNumThread).start();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:多线程编程练习

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