首先,我想说我知道与此类似的问题。我做了一些搜索,然后找到了一些信息。不幸的是,这些解决方案并没有帮助我。我不知道为什么。这就是为什么我问这个问题。
我有两个在Java中使用的线程。我有四个与此相关的课程。第一类是其中带有“ main”方法的类。它设置并启动所有线程。这是我开始并声明线程的方法:
Thread thread1 = new Thread(){
public void run(){
DeliverMessage deliverMess = new DeliverMessage();
deliverMess.deliver();
}
}
Thread thread2 = new Thread(){
public void run(){
Timing time = new Timing();
time.controlTime();
}
}
thread1.start();
thread2.start();
第二类包含所有全局变量。此类称为“ GlobalVariables”。GlobalVariables:
public class GlobalVariables(){
//Variables
public boolean proceed;
public boolean doubleCheck;
}
像这样设置另一个类,称为“ DeliverMessage”。这是我遇到的问题之一。传递消息:
public class DeliverMessage(){
//Variables
String mess1 = "Hello";
String mess2 = "How are you?";
String mess3 = "Goodbye";
//Setup
GlobalVariables global = new GlobalVariables();
public void deliver(){
while(true){
if(global.proceed){
System.out.println(mess1);
}
if(global.doubleCheck){
System.out.println(mess2);
System.out.println(mess3);
}
}
}
我遇到的最后一堂课叫做“计时”。我希望它能够更改布尔变量以控制何时传递消息。这里是:
public class Timing(){
//Setup
GlobalVariables global = new GlobalVariables();
public void controlTime(){
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
global.proceed = true;
try {
TimeUnit.SECONDS.sleep(16);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
global.doubleCheck = true;
}
}
我已经研究过使用“ volatile”。我发现没有用。我试图在“ GlobalVariables”中声明变量,例如“ public volatile booleanproced;”。我尝试更改变量,但“ DeliverMessage”类未注册该更改。我也尝试用“静态”做同样的事情。那也不起作用。变量在“ Timing”类中似乎已更改,但是它们未链接到“ DeliverMessage”类中的SAME变量。
请让我知道我该怎么办。在此先感谢,〜Rane
编辑:谢谢!不过,我有几个非常快速的说明。1)我是否将布尔变量声明为“静态”和“易失性”?2)如何引用“ DeliverMessage”和“ Timing”类中的变量?
你的两个班,定时和DeliverMessage每个人都有自己独特的GlobalVariables的实例,所以改变一个GlobalVariables对象的状态将有其他GlobalVariables对象没有任何影响。如果您希望他们共享相同的GlobalVariables实例,请给他们相同的实例。
即给他们两个
public void setGlobalVariables(GlobalVariables global) {
this.global = global;
}
方法,并将相同的GlobalVariables实例传递到Timing和DeliverMessage类中。
final GlobalVariables global = new GlobalVariables();
Thread thread1 = new Thread(){
public void run(){
DeliverMessage deliverMess = new DeliverMessage();
deliverMess.setGlobalVariables(global);
deliverMess.deliver();
}
}
Thread thread2 = new Thread(){
public void run(){
Timing time = new Timing();
time.setGlobalVariables(global);
time.controlTime();
}
}
thread1.start();
thread2.start();
是的,使GlobalVariables的布尔变量可变,但这仍然不是您的主要问题。
注意:另一个选择是将GlobalVariables实例传递到您的类构造函数中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句