我试图创建一个给定数量的线程,并处理他们在同一时间,使一个“种族”的程序。线程被创建了,但我做错了什么,因为任何线程打印“嗨”。
public class Principal implements Runnable{
public static void main(String[] args) {
int howManyThreads = 3;
Thread thread[];
thread = new Thread[howManyThreads];
for ( int i=0; i < thread.length; i++ ){
thread[i]= new Thread();
thread[i].setName("Thread - " + i);
}
for ( int i=0; i < thread.length; ++i){
thread[i].start();
System.out.println(thread[i].getName() + " - " + thread[i].getState());
}
}
public void run() {
System.out.println("Hi");
}
}
1条答案
按热度按时间91zkwejq1#
的默认构造函数
Thread
类创建一个不执行任何操作的线程。在这里调用默认构造函数:thread[i] = new Thread();
如果希望线程实际执行某些操作,那么必须提供Runnable
示例作为线程构造函数的参数。有几种方法可以做到这一点。最新、最简洁的方法是使用lambda表达式:这个
Runnable
接口是一个@FunctionalInterface
. 因为编译器知道Thread(...)
构造函数想要一个该类型的对象,它推断lambda应该创建这个对象,lambda的主体成为run()
新对象的方法。另一种更古老的方式
Runnable
对象将使用匿名内部类表达式。语法有点麻烦,因为您必须显式地说明新类应该实现什么接口,并且必须显式地声明run()
方法:最古老的方法(更详细)是显式声明命名类:
你可能会问,我为什么要搬走
implements Runnable
从Principal
类,并创建一个全新的类?我这么做是因为,我读过这本书:https://www.amazon.com/clean-code-handbook-software-craftsmanship/dp/0132350882/