为了账号安全,请及时绑定邮箱和手机立即绑定

如何在最有效的情况下使用多个线程而在java中没有同步?

如何在最有效的情况下使用多个线程而在java中没有同步?

摇曳的蔷薇 2019-04-17 18:15:17
问题:假设有一个公交车预订站点,大约有10万个线程正在运行,但总座位只有20个。现在您将如何控制性能以及您在Java多线程中的方法是什么?我回答说我将使用同步方法或阻止,因为它将控制并发线程,锁定将阻止异步执行。但是采访者打断了我,并说同步是一个虚假的想法,性能会降低,而且没有用。如果我错过任何其他有用的多线程概念可以解决这个问题,请告诉我!谢谢!!
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您必须使用许可证20的信号量,这意味着如果乘客被视为线程,则每次有20名乘客可以占用座位。仅在核心java多线程的情况下,这可能是答案。

查看完整回答
反对 回复 2019-05-15
?
桃花长相依

TA贡献1860条经验 获得超8个赞

一个问这样的问题的面试官并不是在寻找一些特定的解决方案或想法。他们希望了解您如何推理同步。一个明智的答案可能是:

有这么多线程,显然没有人关心性能。如果您关心性能,请减少线程数。他们只是争夺同样的资源。

但是如果你必须拥有这么多线程,那么使用锁会很有意义,因为它会通过让大多数线程尽可能长时间地保持在准备运行状态来消除这么多线程带来的一些伤害。虽然锁之外的某些方法可能会使更多线程同时运行,但它可能会降低性能,因为线程会严重影响导致大量缓存ping-ponging和其他问题。有这么多线程,阻止大多数线程是避免执行线程之间争用的最佳策略,并允许这个设计糟糕的应用程序实际上至少完成一些工作。

同样,如果你真的想让它合理地工作,你必须从疯狂的线程计数问题中重新构建它。


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 493 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号