我刚开始学习线程,我正在努力研究多线程。我不确定为什么method1()被调用两次。任何帮助表示赞赏。谢谢!
我已尽力通过删除大量内容使示例变得简单明了
class A implements Runnable {
public void method1() {
System.out.println("Method1");
}
public void methodThread(int numberOfThreads) {
List<Thread> threads = new ArrayList<Thread>();
for(int i=0; i<numberOfThreads; i++) {
Thread t = new Thread(this, "Thread - " +i);
t.start();
}
for(int i=0; i<numberOfThreads; i++) {
threads.get(i).join();
}
}
@Override
public void run() {
System.out.print(Thread.currentThread().getName() + this.method1());
}
public static void main(String[] args) {
A a = new A();
a.methodThread(1);
}
}
Expected output:
Thread - 0 Method1
Actual output
Method1 // Called again??
Thread - 0 Method1
答案 0 :(得分:2)
您的方法method1()执行实际输出,这是在从run方法打印值之前发生的。但是,看起来你正试图将返回的值(可能在你的代码中是“method1”)添加到线程的名称中:
System.out.print(Thread.currentThread().getName() + this.method1());
这会导致您看到的行为。