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--);
}
}
}
为什么代码运行结果是这样的呢?
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你多跑几次应该就不会这样了,如果你把system.out换成写到一个文件,那肯定会多线程输出。
应该和虚拟机的线程调度相关,如果在20次的循环次数执行完毕前第二个线程还没启动起来,当然只会有thread-0跑了,如果后续线程在20次运行结束之前启动,就会有多个线程输出了,你换成2000试试,肯定会有很多线程输出。