首页 > 编程语言 > 详细

多线程笔试题记录

时间:2021-07-26 22:33:13      阅读:18      评论:0      收藏:0      [点我收藏+]

线程题1

设置三个线程并行

t1打印a
t2打印b
t3打印c

输出abc abc abc abc

/**
*
* 设计三个线程并发执行
* t1 打印 a
* t2 打印 b
* t3 打印 c
*
* 输出 abc abc abc abc
*
*/
public class LockTest9 {
    public static void main(String[] args) {
        WaitNofity waitNofity = new WaitNofity();

    //线程t1
        new Thread(() ->{
            try {
                waitNofity.print("a",1,2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"t1").start();

    //线程t2
        new Thread(() ->{
            try {
                waitNofity.print("b",2,3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"t2").start();

    //线程t3
        new Thread(() ->{
            try {
                waitNofity.print("c",3,1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"t3").start();

    }



    static class WaitNofity{
        //执行标志
        int flag = 1;

        /**
         * @Param content 输出内容
         * @Param waitFlag 本次执行标志
         * @Param nextFlag 下次执行标志
         **/
        public void print(String content,int waitFlag,int nextFlag) throws InterruptedException {
            for (int i = 0; i < 4; i++){
                synchronized (this){
                    while (flag != waitFlag){
                        this.wait();//阻塞
                    }
                    System.out.print(content);
                    if(waitFlag == 3){
                        System.out.print(" ");
                    }
                    flag = nextFlag;
                    this.notifyAll();//唤醒全部
                }

            }
        }
    }

}

执行结果:

技术分享图片

多线程笔试题记录

原文:https://www.cnblogs.com/doagain/p/15063400.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!