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票 展开
* 功能:线程功能先演示的注意事项
*/
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票 展开
2个回答
2016-12-09 · 企业短信服务平台。
关注
展开全部
其实你可以理解3个线程同时进行。如果非要确定的说在一时间片中只有一个线程在跑至于到底跑哪个线程完全取决于cup。你可以看看多线程的执行顺序。另外线程休眠1秒的写法是 Thread.sleep(1000);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |