【发布时间】:2015-10-25 09:05:32
【问题描述】:
我知道多线程是如何工作的,如何使用同步方法/块 - 但有一件事我在网上找不到,而且我也不清楚。
假设我们有:
public class Parent {
public Child child;
public Parent(){
child = new Child();
}
}
public class Child{
public int health;
public int mana;
public Child (){
health = 100;
mana = 100;
}
}
这很明显,如果我想从两个不同的线程访问health,我需要像这样制作一个getter:
public synchronized int getHealth(){return health;}
这是同一个变量,当我们同时从两个线程中触摸它时 - 它可能会损坏。 但是整个“孩子”对象呢?例如,我可以在线程 1 上对 mana 进行操作,在线程 2 上对 health 进行操作吗?通过这种方式,我不会触及同一个变量,但我仍然在两个不同的线程上使用“孩子”——所以它可能不安全。 我是否也应该在使用“child”时进行同步?
编辑——一个例子;
gameloop.player_me.setX(5);
gameloop.player_me.setY(5);
我正在从两个线程更改 X 和 Y - 很明显 setX && setY 是同步的。但我也从第三个线程访问gameloop 中的其他变量。我应该在gameloop 上同步吗?
【问题讨论】:
-
当你 同步方法时,你实际上是在同步对变量的访问,因为方法返回变量......你能发布多线程代码......
-
您在网络上的任何地方都找不到答案?这让我很惊讶。你试过Java Language Specification吗?
-
aww,这实际上是一个很棒的网站 O.o。谢谢。
-
“Getter”是一种设计模式。它不是 Java 语言的一部分。调用 getter 来访问某个对象中的某个字段与访问同一字段的任何其他方法没有不同的含义。
标签: java multithreading