[英]Communication between threads java
我目前正在开发一个Java项目,这让我很尴尬:我正在使用线程,所以我有一个名为“鸡”的线程,并带有一个名为“ direction()”的方法,其中给了X和Y它必须去的地方。
然后,我在线程的run()方法中使用此方法。
this.direction(NX,NY);
我也有一个名为“ test1”的主类,在其中我开始了鸡的烹饪,还有一个“食品”类:
Chicken C1=new Chicken(50,750,1,true);
Chicken C2=new Chicken(750,750,2,true);
Chicken C3=new Chicken(200,50,3,true);
C1.start();
C2.start();
C3.start();
Food F1=new food(x,y);
食物的位置由玩家用鼠标选择。
问题是,x和y的值经常变化,因为鸡肉必须移向食物,并且位置只能在食物类/ test1中找到。现在,我在Test1中创建了一个全局变量,可以更改每当我想要并在线程鸡肉中使用它时,例如:
NX=Test1.x;
NY=Test1.y;
我不喜欢使用全局变量,还有另一种方法吗?
不用使用全局变量,而是在构造时将Food
的实例注入到每个Chicken
s中:
Food food = new Food(x, y);
Chicken C1=new Chicken(50,750,1,true,food);
Chicken C2=new Chicken(750,750,2,true,food);
Chicken C3=new Chicken(200,50,3,true,food);
并将其存储在Chicken的成员变量中。 然后,您可以使用this.direction(food.x, food.y)
(尽管您将需要一些方法来确保x和y的更新对所有线程可见,例如使它们易变,或提供同步的吸气剂)。
代替使用全局变量,您应该将food类实现为单例设计模式( https://en.wikipedia.org/wiki/Singleton_pattern )这种设计模式可确保您的对象仅实例化一次,并且您可以检索该唯一实例使用静态类方法(通常称为getInstance)。 构造函数应该是私有的,以防止您实例化以保证唯一的实例。
在第一次获取实例(延迟)的调用中实例化对象的示例:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
由于您使用的线程我会建议使用关键字synchronized
的制定者改变了食物的位置,以避免多个线程在同一时间修改值(如果你打算修改它在多线程)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.