如何上课#39;使用线程的方法

时间:2014-07-31 13:08:30

标签: java multithreading class methods

如果我执行以下操作,我将能够创建一个对象作为线程并运行它。

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 );
   }
}

Que:当我尝试Thread t = new Thread(hello.runThisPlease());时,它无效。那么我们如何使用线程调用方法runThisPlease()

编辑runThisPlease();

的方法所需的参数

4 个答案:

答案 0 :(得分:4)

在java 8中,您可以使用

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

hello::runThisPlease将使用调用Runnable的run方法转换为hello.runThisPlease();


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

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

如果您使用的是java版本< 8,你当然可以用扩展Runnable的anonymus内部类替换方法reference / lambda表达式(这是java8编译器所做的,AFAIK),参见其​​他答案。

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

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

答案 1 :(得分:0)

只需在runThisPlease()方法中调用run()即可使其成为新主题的一部分。

试试这个:

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

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

答案 2 :(得分:0)

您只需在run()方法中调用此方法。

public void run(){
  System.out.println(" Hello ");
  runThisPlease();
}

如果你想传递一些参数,那么你可以使用下面的代码

String str = "Welcome"; 

Thread t = new Thread(new Runnable() {
public void run() {
    System.out.println(str); 
}});

答案 3 :(得分:0)

如果使用Runnable接口,事情可能会更清楚:

public class HelloThread implements Runnable
{
    @Override
    public void run() {
       // executed when the thread is started
       runThisPlease();
    }

    public void runThisPlease() {...}
}

发起此次通话:

Thread t=new Thread(new HelloThread());
t.start();

Thread类无法看到您的额外方法,因为它不是Runnable接口的一部分。 为方便起见,Thread实现了Runnable,但我并不认为它有助于清晰:(