在我的项目中,我有一个由客户端类调用的游戏类。目前,游戏类向文件写入路径,客户端类将从该文件读取并清除内容。我在这里与访问发生太多冲突,因此想使用另一个类作为存储路径数据的方法。但是,我想知道是否仍然存在问题,或者如果游戏类尝试调用存储类中的方法来编写,而客户端类同时调用存储中的方法,那么结果将是什么?班级阅读和清除。

有帮助吗?

解决方案

听起来像您需要考虑线程和同步。我建议阅读“实践中的Java并发性”。

其他提示

在有多个线程的情况下,您的类必须是线程安全的。实现此目的的一种方法是使并发访问的方法成为基因编码标签。

这是一个让您入门的示例: 通用标签

没有synchronized修饰符,该程序将已打印 通用标签

使用synchronized关键字,一次只能有一个线程可以调用synchronized,因此程序可以打印 通用标签

我假设您的两个类在单独的线程中运行,因此它们可能同时访问第三个类。他们正在读取和写入的资源的访问需要同步(互斥)。Java具有关键字“ synchronized”,可以以多种方式使用它来防止并发修改,例如,请参见这里这里详情

理论上正确的答案是:“一切都会发生”。

这两个调用可以一个接一个地运行,也可以彼此交错,结果不可预测,并且可能造成灾难性的后果。

这就是Java为您提供几种处理方式的原因。

  1. 最简单(听起来)的方法是将方法编写为线程安全的。实际上,这通常意味着您仅应使用局部变量,并且不得修改作为参数传递给您的对象。 (没有副作用。)许多方法自动归为此类,在这种情况下,您不必担心并发性。

  2. 如果无法使方法成为线程安全的,则需要以某种方式处理并发调用。 synchronized块是最常用的构造,但在某些情况下,volatile字段或使用Atomic*类就足够了。但是这个主题太重了,无法在一个答案中涵盖,因此我建议您阅读并发教程

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top