4-1线程同步里面关于join()方法

4-1线程同步里面关于join()方法

package com.imooc.bank;

public class Test {

public static void main(String[] args) {
// 创建帐户,给定余额为1000
Bank bank=new Bank("1001",1000);
//创建线程对象
SaveAccount sa=new SaveAccount(bank);
DrawAccount da=new DrawAccount(bank);
Thread save=new Thread(sa);
Thread draw=new Thread(da);
save.start();
draw.start();
try {
save.join();
draw.join();

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(bank);
}

}

​在代码中有两个线程分别调用了join()方法,按照老师讲的,如果一个线程调用了join()方法,那么其他线程就需要等待调用了join()方法的线程执行完毕之后再执行,那么不应该一个saveAccount()会先执行,drawAccount()后执行吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-01-29 16:15:13

同学你好,线程的执行顺序是有很大的随机性的,并不是按照代码顺序进行执行的。它是由获取到的CPU时间片、内存等多重因素影响的。

祝学习愉快!

  • 可是当调用了join方法不是会抢占执行的吗?

    2021-04-15 14:29:58
  • 同学你好,join()是会抢占,但线程的执行顺序是有很大的随机性的,它是由获取到的CPU时间片、内存等多重因素影响的。所以就算先执行了join()方法,也不一定会先抢占到CPU时间片。

    祝学习愉快!

    2021-04-15 18:19:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师