【发布时间】:2014-09-27 02:24:25
【问题描述】:
我想首先说我知道有类似的问题。我做了一些搜索,我确实找到了一些信息。不幸的是,这些解决方案对我没有帮助。我不知道为什么。这就是我问这个问题的原因。
我有两个在 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”。 全局变量:
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);
}
}
}
我遇到的最后一门课叫做“Timing”。我希望它能够更改布尔变量以控制何时传递消息。这里是:
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;
}
}
我已经研究过使用“易失性”。我没有发现那行得通。我尝试在“GlobalVariables”中声明变量,例如“public volatile boolean continue;”。我尝试更改变量,但“DeliverMessage”类没有注册该更改。我也尝试用“静态”做同样的事情。那也没有用。 'Timing' 类中的变量似乎发生了变化,但它们没有链接到 'DeliverMessage' 类中的 SAME 变量。
请让我知道我应该做什么。提前致谢, ~兰恩
编辑:谢谢!不过,我有几个非常快速的澄清。 1)我是否将布尔变量声明为“静态”和“易失性”? 2) 如何引用“DeliverMessage”和“Timing”类中的变量?
【问题讨论】:
标签: java multithreading static volatile