有关sleep()的问题,在线求教!!!!

lizhiwo_wo 2004-07-08 09:00:49
public class ThreadTM
{
public static void main(String [] args)
{
ThreadMTs t= new ThreadMTs();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}

class ThreadMTs implements Runnable
{
private int tick=100;
String str =new String("");
public void run()
{
while(true)
{
synchronized(str)
{
if(tick>0)
{

try
{
Thread.sleep(10);

}
catch(Exception e)
{
System.out.println(e.getMessage());

}

System.out.println(Thread.currentThread().getName()+"is saling ticket"+tick--);
}
}

}
}
}

请问在这个程序中,第一个线程到了Thread.sleep(10);的时候,是不是就不再执行下面System.out.println(Thread.currentThread().getName()+"is saling ticket"+tick--);的代码了,而是立刻切换到第二个线程去执行另外一个对象了,这时第二个线程运行,我就在想如果老是这么下去,岂不是永远都执行不了System.out.println(Thread.currentThread().getName()+"is saling ticket"+tick--);语句了么?
2。如果将sleep(10)放到System.out.println(Thread.currentThread().getName()+"is saling ticket"+tick--);之后,和第一种用法产生的效果一样么?

我比较疑惑,请大家帮助我好么!
...全文
135 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyegg 2004-07-08
  • 打赏
  • 举报
回复
这个程序执行起来没有问题啊,输出结果如下
Thread-0is saling ticket100
Thread-1is saling ticket99
Thread-2is saling ticket98
Thread-3is saling ticket97
Thread-0is saling ticket96
Thread-1is saling ticket95
Thread-2is saling ticket94
Thread-3is saling ticket93
Thread-0is saling ticket92
Thread-1is saling ticket91
Thread-2is saling ticket90
Thread-3is saling ticket89
。。。。。
Thread-0is saling ticket5
Thread-1is saling ticket4
Thread-3is saling ticket3
Thread-2is saling ticket2
Thread-0is saling ticket1
把sleep(10)放到后面一样的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧