目录
1. 继承Thread类
第一种:
public class MyThread extends Thread {
public void run() {
System.out.println("我的新线程!");
}
}
使用的时候直接这样也可以,匿名内部类。
2. 实现Runnable接口,没有返回值,不能抛异常。
第二种:
public class Test implements Runnable {
@Override
public void run() {
System.out.println("我的新线程!");
}
}
3. 实现Callable接口,有返回值,可以抛异常。
这种方法有一个缺点:
通过get()方法获取返回值时对主线程有阻塞。
第三种:
4. 线程池。
第四种:
Tips
Thread类中的start()和run()方法使用的时候不一样
调用start()方法,相当于启动了一个新的线程。
调用run()方法,还是在原来的线程中调用,没有新的线程启动。
实现Runnable接口比继承Thread类的优劣
1、适合多个相同的程序代码的线程共享同一个资源,比如声明成员变量。
2、避免java中单继承的局限性。
3、增加程序的健壮性,面向接口编程,实现解耦操作。
4、ThreadPoolExecutor线程池只能放入实现Runable或callable类线程,不能直接放入Thread类。