JAVA线程中,为什么出来的线程不是随机的。而是 10

/**功能:线程功能先演示的注意事项*/packagecom.xiancheng1;publicclassxiancheng1_1{publicstaticvoidmai... /*
* 功能:线程功能先演示的注意事项
*/
package com.xiancheng1;

public class xiancheng1_1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
TicketWindow tw1=new TicketWindow();
//TicketWindow tw2=new TicketWindow();
//TicketWindow tw3=new TicketWindow();

Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);

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

}

//售票窗口类

class TicketWindow implements Runnable
{
//一共两千张票
private int nums=2000;
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{

//认为if else 代码需要保证其原子性
synchronized(this){
//先判断是否还有票
if(nums>0)
{
//显示售票信息
//Thread.currentThread().getName()得到当前线程的名字
System.out.println(Thread.currentThread().getName()+"正在售出第"+nums+"票");

//出票速度:1秒出一张
try{
Thread.sleep(10);
}catch (Exception e)
{
e.printStackTrace();
}
nums--;
}else
{
//售票结束
System.out.println("票已经售完");
break;
}
}
}
}

}

部分模拟结果:
Thread-1正在售出第1556票
Thread-1正在售出第1555票
Thread-0正在售出第1554票
Thread-0正在售出第1553票
Thread-0正在售出第1552票
Thread-0正在售出第1551票
展开
 我来答
北京金楼世纪科技有限公司
2016-12-09 · 企业短信服务平台。
北京金楼世纪科技有限公司
阅信短信验证码平台是国内新兴智能云通信服务商,隶属于北京金楼世纪科技有限公司,是中国移动、中国联通、中国电信三大运营商的资深战略合作伙伴。
向TA提问
展开全部
其实你可以理解3个线程同时进行。如果非要确定的说在一时间片中只有一个线程在跑至于到底跑哪个线程完全取决于cup。你可以看看多线程的执行顺序。另外线程休眠1秒的写法是 Thread.sleep(1000);
zhongtyler
2016-12-09 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:919万
展开全部
没啥问题啊。看上去很正常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式