java创建多个线程为什么只有一个线程运行?
PHP中文网
PHP中文网 2017-04-17 13:15:21
[Java讨论组]

新手问个简单的问题:
为什么以下代码运行结果是这样的呢?

Thread-0出售票20
Thread-0出售票19
Thread-0出售票18
Thread-0出售票17
Thread-0出售票16
Thread-0出售票15
Thread-0出售票14
Thread-0出售票13
Thread-0出售票12
Thread-0出售票11
Thread-0出售票10
Thread-0出售票9
Thread-0出售票8
Thread-0出售票7
Thread-0出售票6
Thread-0出售票5
Thread-0出售票4
Thread-0出售票3
Thread-0出售票2
Thread-0出售票1

public class ThreadDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestThread t = new TestThread();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
    }
}

class TestThread implements Runnable {
    private int tickets = 20;
    public void run() {
        while(true) {
            if(tickets>0)
                System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
        }
    }
}
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
黄舟

你多跑几次应该就不会这样了,如果你把system.out换成写到一个文件,那肯定会多线程输出。
应该和虚拟机的线程调度相关,如果在20次的循环次数执行完毕前第二个线程还没启动起来,当然只会有thread-0跑了,如果后续线程在20次运行结束之前启动,就会有多个线程输出了,你换成2000试试,肯定会有很多线程输出。

PHP中文网
t.wait()  
不wait的话 线程0跑完了就退出了
ringa_lee
    public class ThreadDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new TestThread().start();
        new TestThread().start();
        new TestThread().start();
        new TestThread().start();
    }
}

class TestThread extends Thread {
    private int tickets = 20;
    public void run() {
        while(true) {
            if(tickets>0)
                System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
            else
                break;
        }
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号