【发布时间】:2014-11-26 17:34:02
【问题描述】:
我有两种方法:第一种(多线程)等待输入,并根据您输入的内容打印 1、2、3,什么都没有或完全结束。第二个(Dumper)采用当前值 1、2 或 3 并每 300 毫秒打印一次(至少应该如此)。 两种方法都可以正常工作(1 打印我想要的值;每 300 毫秒打印 2 次),但我似乎无法让方法 2 获取方法 1 刚刚收到的值,即使它们同时运行。
我搜索了如何同时运行两者找到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();
}
}
我很感激任何建议,因为我现在很迷茫。提前谢谢了! :)
【问题讨论】:
-
是的,正如@Mike'Pomax'Kamermans 所提到的,在这里你用不同的变量编写了两种不同的方法,比如
status。这意味着变量状态不一样。他们没有分享您想要实现的目标。
标签: java multithreading variables