天天看點

Java 多線程的建立方式

作者:Java愛好者

繼承 Thread類

/**
 * 繼承Tread類,實作多線程
 */
public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        // 線程1
        new MyThread().start();
        // 線程2
        new MyThread().start();
        // 線程3
        new MyThread().start();
    }
}           

實作Runnable接口

/**
 * 實作Runnable接口實作多線程
 */
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        new Thread(new MyRunnable()).start();
        new Thread(new MyRunnable()).start();
        new Thread(new MyRunnable()).start();
    }
}           

實作Callable接口

  • Future版
import java.util.concurrent.*;

/**
 * 實作Callable<T>,利用線程池建立多線程
 */
public class MyCallable implements Callable<String> {
    @Override
    public String call() {
        return Thread.currentThread().getName();
    }

    public static void main(String[] args) {
        // 建立線程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        Future<String> submit = executorService.submit(new MyCallable());
        try {
            System.out.println(submit.get());
        } catch (InterruptedException | ExecutionException e) {
            Thread.currentThread().interrupt();
            throw new RuntimeException(e);
        }
    }
}           
  • FutureTask版
/**
 * 實作Callable<T>,利用線程池建立多線程
 */
public class MyCallable implements Callable<String> {
    @Override
    public String call() {
        return Thread.currentThread().getName();
    }

    public static void main(String[] args) {
        // 建立線程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        FutureTask futureTask = new FutureTask(new MyCallable());
        executorService.submit(futureTask);
        try {
            System.out.println(futureTask.get());
        } catch (InterruptedException | ExecutionException e) {
            Thread.currentThread().interrupt();
            throw new RuntimeException(e);
        }
    }
}           

繼續閱讀