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

Java 在多线程上-方法被调用两次,java,multithreading,Java,Multithreading,我刚开始学习线程,我正在尝试多线程。我不知道为什么method1()会被调用两次。感谢您的帮助。谢谢 我已经尽了最大努力,通过删除大量内容使示例变得简单/清晰 class A implements Runnable { public void method1() { System.out.println("Method1"); } public void methodThread(int numberOfThreads) { List<Thread>

我刚开始学习线程,我正在尝试多线程。我不知道为什么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
A类实现可运行{
公共无效方法1(){
System.out.println(“方法1”);
}
公共void方法线程(int numberOfThreads){
List threads=new ArrayList();
对于(int i=0;i您的方法method1()执行实际输出,这发生在从run方法打印值之前。但是,看起来您正在尝试将返回值(在代码中可能是“method1”)添加到线程名称中:

System.out.print(Thread.currentThread().getName() + this.method1());
这将导致您看到的行为。

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

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

这将导致您看到的行为。

这不会编译--方法
method1
methodThread
没有返回类型。在method1()内添加断点并检查调用堆栈。我只是尝试放置sudo代码:/This仍然无法通过编译。This无法编译-
method1
methodThread
方法没有返回类型。在method1()内添加断点检查调用堆栈。我只是想把sudo代码放进去:/这仍然不能通过编译。我再次打印了值。谢谢。我再次打印了值。谢谢