栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Thread 有的时候会程序退出成功,有的时候会无限循环

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Thread 有的时候会程序退出成功,有的时候会无限循环

爱自习的暴鲤龙:
我这个写了两个线程之间转账。一个线程观察

爱自习的暴鲤龙:
有的时候能够结束退出,有的时候就是一直在Ob无限循环了。。。有兴趣帮帮忙看看的嘛。啥原因。。

public class TestThread {
    public static void main(String[] args) {

        Count aCount =new Count(100) ;
        Count bCount =new Count(100) ;
        final Count cCount =new Count(0) ;
        long l = System.currentTimeMillis();


        Thread a= new Thread(new Runnable() {
            @Override
            public void run() {
                while (aCount.total > 0) {
                    synchronized (cCount){
                        aCount.reduce();
                        try {
                            cCount.add();
                            System.out.println(Thread.currentThread().getName()+"-"+aCount.trade+":t aCount:"+aCount.total+"t cCount:"+cCount.total);
                            cCount.notify();
                            cCount.wait();//让处锁
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        cCount.notify();
                    }
                }
            }
        },"Thread A");
        Thread b = new Thread(new Runnable() {
            @Override
            public void run() {
                while(bCount.total<200){
                    if (cCount.total>0){
                        synchronized (cCount){
                            try {
                                cCount.reduce();
                                System.out.println(Thread.currentThread().getName()+"-"+bCount.trade+":t bCount:"+bCount.total+"t cCount:"+cCount.total);
                                cCount.notify();
                                cCount.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            bCount.add();
                            cCount.notify();
                        }
                    }
                }
            }
        },"Thread B");

        Thread o = new Thread(()->{
            while(bCount.total<200){
                System.out.println("aCount.total:"+aCount.total+"t bCount.total:"+bCount.total+"t cCount.total:"+cCount.total);
            }
        },"Thread O:");
        o.start();
        a.start();
        b.start();

    }

    public static class Count implements AddAndReduce{
        int total;
        int trade;

        public Count(int total){
            this.total = total;
            this.trade= 0;
        }

        @Override
        public void add() {
            this.total +=1;
            this.trade +=1;
        }

        @Override
        public  void reduce() {
            this.total -=1;
            this.trade +=1;

        }
    }


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号