在 Java,创建线程共有3种模式:

  1. 继承Thread
  2. 实现Runnable接口
  3. 实现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;
    }
}

优点:

  • 有返回值
  • 可以抛出异常

缺点:

  • 代码较复杂,需要使用线程池