import java.io.IOException;
public class Test implements Runnable {
private int m, n;
public synchronized void run() {
try {
for (int i = 0; i < 10; i++) {
m++;
n++;
Thread.sleep(100);
System.out.println(m + ", " + n);
}
} catch (InterruptedException e) {
}
}
public static void main(String[] args) {
try {
Test a = new Test();
new Thread(a).start();
new Thread(a).start();
} catch (Exception e) {
}
}
}
答案 0 :(得分:3)
你是不对的,你不能两次启动相同的线程。但你不是在这里做的。您将分别开始两个单独的主题。
您的代码基本上与以下内容相同:
Thread t1 = new Thread(a);
t1.start();
Thread t2 = new Thread(a);
t2.start();
答案 1 :(得分:0)
您正在声明2个不同的线程并一个接一个地运行它们。如果您添加以下代码。
StackPane
您可以轻松查看第一个线程结束的位置,然后第二个线程开始。
答案 2 :(得分:0)
每个线程都需要执行Test
类实例中描述的任务。更确切地说是run
方法。在您的情况下,两个线程都需要执行Test
的任务,但是他们还需要使用此类的相同实例(存储在a
引用中)。
问题是run
方法是同步,这意味着它使用当前实例的监视/锁定(this
- 可通过a
引用获得),这意味着两个线程都无法同时执行 。更准确地说,其中一个线程需要等待,直到其他线程完成来自同步块(整个run
)的执行代码。
所以在你的情况下
a
a
a
m
和n
每次循环都会增加)a