如果执行以下操作,则可以将对象创建为线程并运行它。

class ThreadTest
{
   public static voic main(String[] args)
   {
      HelloThread hello = new HelloThread();
      Thread t = new Thread(hello);
      t.start();
   }
}

class HelloThread extends Thread
{
   public void run()
   {
      System.out.println(" Hello ");
   }
}


现在,如果我的HelloThread类有另一个方法调用runThisPlease(),我们应该如何用线程运行它?

例:

class HelloThread extends Thread
{
   public void run()
   {
      System.out.println(" Hello ");
   }

   public void runThisPlease(String input)
   {
      System.out.println (" Using thread on another class method: " + input );
   }
}


e:当我尝试Thread t = new Thread(hello.runThisPlease());时,它不起作用。那么,如何使用线程调用方法runThisPlease()

编辑:runThisPlease()方法中需要的参数;

最佳答案

在Java 8中,您可以使用

Thread t = new Thread(hello::runThisPlease);


hello::runThisPlease将通过调用Runnable的运行方法转换为hello.runThisPlease();



如果您要调用方法,则需要参数,例如System.out.println,您当然也可以使用普通的lambda表达式:

final String parameter = "hello world";
Thread t = new Thread(() -> System.out.println(parameter));




如果使用的Java版本Runnable的匿名内部类(这是java8编译器的作用,AFAIK),请参见其他答案。

但是,您也可以使用扩展Thread的匿名内部类:

final HelloThread hello = //...
Thread t = new Thread() {
    @Override
    public void run() {
        hello.runThisPlease();
    }
};

10-07 18:57