在 Java,创建线程共有3种模式:
- 继承
Thread
类 - 实现
Runnable
接口 - 实现
Callable
接口
继承 Thread 类
public class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentTread().getName());
}
}
public static void main(String[] args) {
Thread t1 = new MyThread();
t1.start();
}
实现 Runnable 接口
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentTread().getName());
}
}
public static void main(String[] args) {
Runnable myRunnable = new MyRunnable();
Thread t1 = new Thread(myRunnable);
t1.start();
}
推荐使用实现 Ruunable 接口,而不是继承 Thread 类。因为 Java 无法实现多重继承,如果MyThread
类已经继承了另一个父类,就无法继承 Thread
类了。
实现 Callable 接口
// 创建线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<Integer> f1 = pool.submit(new MyCallable(100));
Future<Integer> f2 = pool.submit(new MyCallable(200));
Integer i1 = f1.get();
Integer i2 = f2.get();
pool.shutdown();
public class MyCallable implements Callable<Integer> {
private int number;
public MyCallable(int number) {
this.number = number;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int x = 1; x <= number; x++) {
sum += x;
}
return sum;
}
}
优点:
- 有返回值
- 可以抛出异常
缺点:
- 代码较复杂,需要使用线程池