如果我执行以下操作,我将能够创建一个对象作为线程并运行它。
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()
;
答案 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,但我并不认为它有助于清晰:(