Java併發編程之線程的建立

簡介

線程是基本的調度單位,它被包含在進程之中,是進程中的實際運做單位,它自己是不會獨立存在。一個進程至少有一個線程,進程中的多個線程共享進程的資源。java

Java中建立線程的方式有多種如繼承Thread類、實現Runnable接口、實現Callable接口以及使用線程池的方式,線程池將在後面文章中單獨介紹,這裏先介紹另外三種方式。異步

繼承Thread類

優勢:在run方法裏能夠用this獲取到當前線程。ide

缺點:因爲Java不支持多繼承,因此若是繼承了Thread類後就不能再繼承其餘類。this

public class MyThread extends Thread {
    /**
     * 線程要執行的任務
     */
    @Override
    public void run() {
        System.out.println("do something...");
    }

    public static void main(String[] args) {	
	//建立線程
        MyThread myThread = new MyThread();
	//啓動線程
        myThread.start();	
    }
}

實現Runnable接口

優勢:實現Runnable接口後不影響繼承其餘類,以及有利於多個線程資源共享。線程

缺點:獲取當前線程須要調用Thread.currentThread()。code

public class MyThread implements Runnable {
     /**
     * 線程要執行的任務
     */
    @Override
    public void run() {
        System.out.println("do something...");
    }

    public static void main(String[] args) {
	//建立兩個線程,並指定相同的任務
	Thread thread1 = new Thread(new MyThread());
        Thread thread2 = new Thread(new MyThread());
	//啓動線程
        thread1.start();
        thread2.start();
    }
}

實現Callable接口

優缺點相似於實現Runnable接口,可是實現Callable接口能夠有返回值。繼承

public class MyThread implements Callable<String> {
    /**
     * 線程要執行的任務,而且具備返回值
     */
    @Override
    public String call() throws Exception {
        System.out.println("do something...");
        Thread.sleep(3000);
        return "我是返回值";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
	//建立異步任務
        FutureTask<String> futureTask = new FutureTask(new MyThread());
	//啓動線程
        new Thread(futureTask).start();
	//阻塞等待線程執行完成並返回結果
        String result = futureTask.get();
        System.out.println(result);
    }
}
相關文章
相關標籤/搜索