在Java里面,创建线程有两种方式,一种是通过实现Runnable,然后把它传给Thread的构造方法。
public class MyRunnable implements Runnable {
public void run() { }
}
new Thread(new MyRunnable()).start();
第二种是直接继承Thread。
public class MyThread extends Thread {
public void run() { }
}
new MyThread().start();
这两种方式都能创建线程,它们之间有什么区别吗?
建议使用第一种实现Runnable的方式,因为这种方式复用性和扩展性更好,比如说我们继承一些现有的基础任务类,然后再实现Runnable启动线程,提供代码复用率。
public class MyRunnable extends BaseTask implements Runnable {
public void run() { }
}
如果我们是采用继承Thread的方式,我们将无法再继承其它类。继承Thread这种方式通常是用于统一修改线程的某些参数或者处理一些事务。
public class MyThread extends Thread {
public MyThread(Runnable target) {
super(target);
setUncaughtExceptionHandler((t, e) -> {
//do something
});
}
}
new MyThread(new MyRunnable()).start();
上面就是通过继承Thread,统一处理线程中的异常,然后再结合第一种方式来创建线程。
内容