多线程求助!!!!

weixin_41730532 2019-04-15 07:19:03
class comparedemo1
{
public static void main(String[] args)
{
ticket t = new ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(InterruptedException e){}
t.flag = false;
t2.start();
}
}
class ticket implements Runnable
{
private int num = 100;
Object obj = new Object();
boolean flag = true;
public void run(){
if (flag)
{
while(num>0){
synchronized(obj){
if(num > 0){
try{Thread.sleep(10);}catch(InterruptedException e ){}
System.out.println(Thread.currentThread().getName()+"...obj..."+num--);
}
}
}
}
else{
while(num>0){
show();
}
}

}
public synchronized void show(){
if(num > 0){
try{Thread.sleep(10);} catch(InterruptedException e ){}
System.out.println(Thread.currentThread().getName()+"...function..."+num--);
}
}
}


为什么主线程被睡之前之后打印的结果不同,请问各位大佬,是什么原因导致的线程打印结果的改变?

被睡之前:


被睡之后:

...全文
348 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_siat 2019-04-17
  • 打赏
  • 举报
回复
线程执行顺序是不确定的
qq_39936465 2019-04-17
  • 打赏
  • 举报
回复
引用 楼主 weixin_41730532 的回复:
为什么主线程被睡之前之后打印的结果不同,请问各位大佬,是什么原因导致的线程打印结果的改变?[/color]
主程序没添加sleep时,t.flag=false;执行速度快,所以造成,当2个线程if判断时 flag都是false; 而你加了sleep后 线程0 flag=true; 而线程1 flag=false;

62,624

社区成员

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

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