在Java中,如果两个类同时在第三类中调用方法,会发生什么?
-
27-10-2019 - |
题
在我的项目中,我有一个由客户端类调用的游戏类。目前,游戏类向文件写入路径,客户端类将从该文件读取并清除内容。我在这里与访问发生太多冲突,因此想使用另一个类作为存储路径数据的方法。但是,我想知道是否仍然存在问题,或者如果游戏类尝试调用存储类中的方法来编写,而客户端类同时调用存储中的方法,那么结果将是什么?班级阅读和清除。
解决方案
听起来像您需要考虑线程和同步。我建议阅读“实践中的Java并发性”。
其他提示
在有多个线程的情况下,您的类必须是线程安全的。实现此目的的一种方法是使并发访问的方法成为基因编码标签。
这是一个让您入门的示例: 通用标签
没有synchronized
修饰符,该程序将已打印
通用标签
使用synchronized
关键字,一次只能有一个线程可以调用synchronized
,因此程序可以打印
通用标签
理论上正确的答案是:“一切都会发生”。
这两个调用可以一个接一个地运行,也可以彼此交错,结果不可预测,并且可能造成灾难性的后果。
这就是Java为您提供几种处理方式的原因。
-
最简单(听起来)的方法是将方法编写为线程安全的。实际上,这通常意味着您仅应使用局部变量,并且不得修改作为参数传递给您的对象。 (没有副作用。)许多方法自动归为此类,在这种情况下,您不必担心并发性。
-
如果无法使方法成为线程安全的,则需要以某种方式处理并发调用。
synchronized
块是最常用的构造,但在某些情况下,volatile
字段或使用Atomic*
类就足够了。但是这个主题太重了,无法在一个答案中涵盖,因此我建议您阅读并发教程。
不隶属于 StackOverflow