多线程的两种启动方式的简单总结

 ̄綄美尐妖づ 提交于 2019-12-01 08:49:11

1. 继承Thread类,重写run方法,new出对象.start()即可。

public class Thread3 extends Thread{
  @Override
  public void run() {
   for (int i = 0; i < 20; i++) {
    System.out.println(this.getName()+":"+i+"这是线程"); 
   }
  }
}
2. 实现Runnable接口,实现run方法,把实现类的对象obj传给new Thread(obj),再用Thread 类的对象.start()方法来启动线程。

public class Thread2 implements Runnable {
 @Override
 public void run() {
  for (int i = 0; i < 20; i++) {
   String name = Thread.currentThread().getName();
   System.out.println(name+":"+i);
  }
  
 }
}
 
//测试类
public class testThread {
 public static void main(String[] args) {
  Thread2 thread2 = new Thread2();
  Thread thread = new Thread(thread2);
  thread.start();
  }
}

 

 注意:不能直接调用run方法,启动线程必须使用start()方法,直接调用run方法是相当于直接调用普通方法
       直接继承Thread的可以用(Thread.currentThread()获取当前运行的线程)或this.getName()/setName()方法来得到或者赋予一个线程名字。
       实现runnable接口的用Thread.currentThread()获取当前运行的线程或Thread.currentThread().getName()/setName()方法来得到或者赋予一个线程名字。这里没有this。
 区别:实现Runnable接口有何优点?
         1. 解决了单继承的问题,一个类只能继承一个类,类继承了Thread类之后就不能再继承其他类了。实现Runnable接口,还可以继承其他类,实现其他接口。
         2. 增强了程序的扩展性,降低了程序的耦合性(解耦)
             实现Runnable接口的方式,把设置线程任务和开启线程进行了分离(解耦)。实现类中,重写了run方法,用来设置线程任务,创建Thread类的对象,调用start方法,用来开启新线程。
         3.建议以后使用中用实现Runnable接口的方式

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!