我有两种方法:第一种(MultiThreaded)等待输入,根据你键入的内容,它会打印1,2,3,无或完全结束。第二个(Dumper)取当前值1,2或3并每300ms打印一次(至少它应该)。 两种方法单独工作正常(1打印我想要的值;每300ms打印2次),但我似乎无法获得方法2来获取方法1刚收到的值,即使它们同时运行。< / p>
我搜索了如何同时运行这两个this,所以我知道我必须使用线程。那么如何使用另一种方法中的变量(或者同时使用两种方法)查找this - 但是我猜我使用volatile的方式不正确?
这是我的代码:
MultiThreaded.java
public class MultiThreaded extends Thread{
volatile int status ;
public static void main(String[] args) {
new MultiThreaded().execute_input();
}
public MultiThreaded() {
}
public void run() {
System.out.println("BEGIN");
while(true) new MultiThreaded().execute_input();
}
public void execute_input() {
int input;
while (true) {
try {
input = System.in.read();
} catch (Exception e) {input = 0;}
switch(input) {
case '1' :
case '2' :
case '3' :
status = input-'0';
System.out.print(status);
break;
case 'q': //End
return;
default:
}
}
}
}
Dumper.java
class Dumper extends Thread{
volatile int status;
public static void main (String[] args) {
new Dumper().run();
}
public void run() {
while(true) printName();
}
private void printName() {
System.out.print("[");
System.out.print(status);
System.out.println("]");
try { Thread.sleep(300); }
catch (Exception e) {}
}
}
Main.java
public class Main {
public static void main(String[] args) {
new MultiThreaded().start();
new Dumper().start();
}
}
我很感激任何建议,因为我现在很迷茫。提前谢谢了! :)
答案 0 :(得分:0)
我没有看到您的代码的任何部分确保两个线程共享相同的status
:只是因为它们具有相同的名称并不意味着它们是相同的变量
到目前为止,你所做的是在代码中,&#34;两个类都有自己的变量状态,并且可以从线程&#34;中修改,但是现在你仍然需要编写确保操作实际发生的代码。例如,您可以在MultiTreaded实例可以调用的Dumper上使用setStatus(int s)
方法,或者甚至可以直接操作dumper.status
变量。
无论你使用什么,至少有一个线程需要知道另一个存在。例如:
public static void main(String[] args) {
Dumper device = new Dumper();
MultiThreaded master = new MultiThreaded(device);
master.start();
device.start();
}
并在MultiThreaded类中,
Dumper device;
...
public MultiThreaded(Dumper device) {
this.device = device;
}
public void execute_input() {
...
device.status = status;
}