老师上课时在继Thread类中用for循环start开了很多个线程,但是下来自己试了试却弄不了,这是为什么?
public class MultithReading extends Thread{
public MultithReading(){
Thread thread= new Thread();
for (int i=0;i<10;i++){
thread.start();
}
Thread.currentThread().getThreadGroup().list();
}
}
该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:
您在 MultithReading 类的构造函数中创建了一个 Thread 对象,并使用 for 循环启动了 10 个线程。但是,每次循环都使用同一个 Thread 对象启动线程,这是不正确的做法。
在 Java 中,每个线程都应该由不同的 Thread 对象来启动。如果使用同一个 Thread 对象启动多个线程,会导致线程之间的竞争和冲突,从而引发各种问题,比如线程安全问题、死锁等。
因此,正确的做法是在循环中创建多个 Thread 对象,并使用这些对象启动线程。示例如下:
public class MultithReading extends Thread {
public MultithReading() {
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(this);
thread.start();
}
}
@Override
public void run() {
// 线程执行的代码
// ...
}
}
在上面的示例中,我们在 for 循环中创建了 10 个 Thread 对象,并使用这些对象启动了 10 个线程。每个线程的执行代码在 run 方法中实现,这个方法是 Thread 类的一个抽象方法,需要我们自己实现。
另外,如果您想获取线程组的信息,可以使用 ThreadGroup 类的 list 方法,这个方法可以将线程组中的所有线程打印出来。但是,您需要注意的是,list 方法只是将线程信息打印到控制台上,不会返回任何结果。如果您想获取线程信息,可以使用 ThreadGroup 类的 enumerate 方法,这个方法会返回线程数组,包含线程组中的所有线程。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
继承Thread类时需要重写Run方法啊
你这代码不应该直接报错吗?每个线程对象的start()方法是用来启动线程的,只能调用一次,第二次调用就会报错了啊!!!
不知道你这个问题是否已经解决, 如果还没有解决的话:优点:编写简单,如果需要访问当前线程,则无需使用 Thread.currentThread() 方法,直接使用
this即可获取当前线程
缺点:因为线程类已经继承了Thread类,Java语言是单继承的,所以就不能再继承其他父类了。