實現多線程的幾種方法

一。通過繼承Thread類實現多線程

繼承Thread類,並覆蓋父類的run()方法。如下例子:

public class MyThread extends Thread {
    public static void main(String[] args) {
        new MyThread().start();
    }
    @Override
    public void run(){
        System.out.println("利用繼承Thread類,實現多線程。");
    }
}

二。通過實現Runnable接口實現多線程

實現Runnable接口,並實現父類run()方法。如下例子:

public class MyRunnable implements Runnable {
    public static void main(String[] args) {
        new Thread(new MyRunnable()).start();
    }
    @Override
    public void run() {
        System.out.println("通過實現Runnable接口,實現多線程。");
    }
}

三。通過線程池實現多線程

通過線程池實現多線程,本質上其實還是利用了上述兩種實現多線程的方法。線程池實現線程,如下例子:

public class MyRunnable implements Runnable {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        new Thread(new MyRunnable()).start();
        //創建默認線程池
        ExecutorService service = Executors.newCachedThreadPool();
        //把實現Runnable接口的類提交給線程池,讓線程池執行
        service.submit(new MyRunnable());
        //關閉線程池
        service.shutdown();
    }
    @Override
    public void run() {
        System.out.println("通過實現Runnable接口,實現多線程。");
    }
}

四。通過實現Callable接口實現線程

實現Callable接口並實現call()方法。例子如下:

public class MyCallable implements Callable<String> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //創建默認線程池
        ExecutorService service = Executors.newCachedThreadPool();
        //把實現Runnable接口的類提交給線程池,讓線程池執行
        Future<String> future = service.submit(new MyCallable());
        System.out.println(future.get());
        service.shutdown();
    }
    @Override
    public String call() throws Exception {
        return "通過實現Callable接口,實現多線程。";
    }
}

五。利用FutureTask完成多線程的使用

public class MyFutureTask {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "通過FutureTask實現多線程!";
            }
        });
        futureTask.run();
        System.out.println(futureTask.get());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章