三个线程打印ABC,这样可以吗?

public class test {
    public static volatile int flag1 = 1;
    public static volatile int flag2 = 0;
    public static volatile int flag3 = 0;
    public static void main(String[] args) {
        Thread t1 = new Thread(){
            @Override
            public void run() {
                while(true)
                {
                    if(flag1==1)
                    {
                        System.out.println("A");
                        flag1=0;
                        flag2=1;
                    }


                }
            }
        };
        Thread t2 = new Thread(){
            @Override
            public void run() {
                while(true)
                {
                    if(flag2==1)
                    {
                        System.out.println("B");
                        flag2=0;
                        flag3=1;
                    }

                }
            }
        };
        Thread t3 = new Thread(){
            @Override
            public void run() {
                while(true)
                {
                    if(flag3==1)
                    {
                        System.out.println("C");
                        flag3=0;
                        flag1=1;
                    }

                }
            }
        };

        t1.start();
        t2.start();
        t3.start();


    }
}
打印出来结果没错,不知这样是否可以?

#学习路径#
全部评论
可以的,但一般不会这么做
1 回复 分享
发布于 2021-07-18 12:35
耗费性能,如果其中一个线程执行逻辑的时间很长,其他线程要不停的自旋判断,耗费CPU,如果用同步的方式,当需要使用下个线程的时候进行唤醒,可以避免性能消耗
点赞 回复 分享
发布于 2022-05-16 15:57
可以直接用一个 atomicInteger,直接支持多线程,省了2个变量,也能简化代码逻辑
点赞 回复 分享
发布于 2021-07-21 20:52

相关推荐

沉淀去了,8月是不是机会会多一点,。打招呼300+,就一个小厂面试,聊了十分钟天就让我去了,暑假继续沉淀了,到八月九月冲了
丰川打工祥:我目前的体感是,双非本+一段小厂实习,基本约不到中厂的面。已经开始第二段小厂了。可能的确是最近hc太少了。
点赞 评论 收藏
分享
粗心的熊熊求求offer:什么内容都没有还弄两页
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务