在多线程 - 方法被调用两次

时间:2016-03-15 20:51:25

标签: java multithreading

我刚开始学习线程,我正在努力研究多线程。我不确定为什么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

1 个答案:

答案 0 :(得分:2)

您的方法method1()执行实际输出,这是在从run方法打印值之前发生的。但是,看起来你正试图将返回的值(可能在你的代码中是“method1”)添加到线程的名称中:

System.out.print(Thread.currentThread().getName() + this.method1());

这会导致您看到的行为。