jixiangdong1 2016-05-11 17:50 采纳率: 0%
浏览 1083
已采纳

各位大神帮忙看下一个JAVA多线程问题

public class ttt
{ public static void main(String args[])
{
account a=new account();
person person1=new person();
person person2=new person();
person1.cunkuanjine=1000;
person2.cunkuanjine=2000;
person1.zhanghu=a;
person2.zhanghu=a;
Thread a1=new Thread(person1);
Thread a2=new Thread(person2);
a1.start();
a2.start();
System.out.println(a.getnum());
if(a1.isAlive()==false&&a2.isAlive()==false){
System.out.println("结束");

}

}
}
class account
{
private int mum=0;
public void setnum(int mum)
{
this.mum=mum+this.mum;
}
public int getnum()
{
return this.mum;
}

}
class person implements Runnable
{ public static Object obj=new Object();
private String name;
public int cunkuanjine;
public account zhanghu;
public void run()
{
synchronized(obj){
cunqian(cunkuanjine,zhanghu);

System.out.println(zhanghu.getnum());
}

 }
public String getName() 
{
    return name;
}

public void setName(String name)
{
    this.name = name;
}
public void cunqian(int a,account b)
{
    b.setnum(a);
}

}
初学者自己的代码是这样的 按照我想的输出结果应该是 3000 1000 3000 结束 但是为啥运行输出 0 1000 3000

  • 写回答

5条回答 默认 最新

  • 泰 戈 尔 博客专家认证 2016-05-12 00:53
    关注

    对于线程而言,虽然代码中确实使用了start方法,但这时仅仅是将线程作为ready状态而已。真正的线程工作还是取决于操作系统的,操作系统管理着计算机上所有的task,而这时具体执行哪一个线程需要靠它们的竞争或者计算机的调度策略,所以会有一定的偶然性。于是就有可能出现你上面的结果。个人建议如果想让一个线程在某一个线程之前执行就使用join方法。希望对你有用图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?