关于join方法的调用位置。

关于join方法的调用位置。

http://img1.sycdn.imooc.com//climg/5e21c89909fe01ad04460199.jpg

如果方法调用的顺序改为save.start然后是save.join()然后再draw.start最后是draw.join是不是也能解决同步的问题呢?

正在回答

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

2回答

同学你好,同学好像对同步的理解有所偏差,同步是在同一时刻只有一个线程可以执行这个方法。也就是说同一个时间只能有一个线程得到执行,另一个线程必须等待当前线程执行完这个方法或者代码块以后再执行另一个线程的方法或者代码块。

    例如:两个窗口在进行售票时,(两个窗口相当于两个线程),同一时间都要售买a车厢中20A座位的票,为了避免两个窗口都售卖这张票,就需要保证同一时刻只有一个窗口售卖成功,另一个窗口只能等待,之前的窗口卖完成以后在执行。

    如果同学想要使用同步,则可以使用synchronized关键字。synchronized关键字在进行一个线程执行的过程中,其它线程要参与执行时就会起作用。synchronized的作用就是防止同一时刻其他线程进入执行该方法,避免造成数据不同步等问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小尤 2020-01-18 11:32:28

同学你好,不能解决同步的问题。join()方法的作用是等待调用该方法的线程结束后才能执行。如果draw线程调用join()方法,那么只有当draw线程执行完毕,其他的线程才能执行。如果不加join(),那么两个线程可能交替执行。同步与join()方法调用的顺序无关。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 weixin_慕仰9572461 #1
    我的意思是,save调用start方法先启动然后调用join方法等save线程执行完了之后draw再启动然后再等draw执行完成(等save执行完成再启动draw线程),那么两个线程是不是就不会发生交替执行的问题了?
    2020-01-18 12:03:38
  • 同学你好,是的,两个线程是不会发生交替执行的。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-01-18 13:36:54
  • 提问者 weixin_慕仰9572461 #3
    也就是说解决了同步的问题吗?
    2020-01-18 13:44:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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