Java 带有runnable参数的线程打印名称
大家好,我正在努力学习java多线程的基础知识,在学习的过程中我发现了这个练习Java 带有runnable参数的线程打印名称,java,Java,大家好,我正在努力学习java多线程的基础知识,在学习的过程中我发现了这个练习 public class Test { public static void main(String[] args) { Runnable rrr = () -> Thread.currentThread().setName(args[0]); new print(rrr).start(); } } 本练习要求实现print类,以便以下测试打印args[0]的
public class Test {
public static void main(String[] args) {
Runnable rrr = () -> Thread.currentThread().setName(args[0]);
new print(rrr).start();
}
}
本练习要求实现print类,以便以下测试打印args[0]的值
public class print extends Thread{
public print(Runnable rrr) {
}
public void run()
{
System.out.println("run() called by " + Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName());
}
}
这是我的实现,对吗?没有使用
Runnable rrr
参数。所以代码不会在任何地方执行。您需要将代码更改为
public class print extends Thread{
private Runnable rrr;
public print(Runnable rrr) {
this.rrr = rrr;
}
public void run()
{
rrr.run(); // this runs "Thread.currentThread().setName(args[0])"
System.out.println("run() called by " + Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName());
}
}
让它工作
更简单的方法:
Thread t = new Thread(() -> {
System.out.println("Thread name is " + Thread.currentThread().getName());
});
t.setName("Peter");
t.start();
我的名字是彼得
当线程启动构造函数时,构造函数不需要Runnable,直接调用run方法不使用
Runnable rrr
参数。所以代码不会在任何地方执行。您需要将其存储在一个变量中,然后在另一个run()
方法中执行rrr.run()@ShamithaSilva Java8 Lambdaexpression@zapl,我现在觉得自己老了(由此,我在线程“thread-0”java.lang.ArrayIndexOutOfBoundsException:0在Test.lambda$main$0(Test.java:11)在print.run(print.java:23)@lucagianni表示您没有使用参数启动程序。与脚本语言不同,[0]不是程序名,而是实际的第一个参数。因此,如果使用命令行参数,则不会出现错误?@lucagianni yes如果将命令行参数传递给java程序,则将通过args[0]选择该参数作为第一个参数
并将因此作为threadname打印到控制台,您能解释更多吗?在线程对象上调用start方法时,会自动调用run方法,因此您要执行的代码应该只在run方法中,并且在调用start方法时会自动调用它