JAVA實現多線程的方法

併發編程使我們可以將程序劃分爲多個分離的、獨立運行的任務。通過多線程機制,這些獨立任務中的沒一個都將由執行線程來驅動。要搞清這些,就先搞清什麼叫線程?所謂線程,就是進程中的一個單一的順序控制流。

多線程的實現一般有三種方法:

1、繼承Thread類,重寫run()方法。

Thread本質上是Runnable接口的一個實例,它代表一個線程的實例,並且啓動線程的唯一方法就是通過Thread類的start()方法。

class MyThread extends Thread{
    public void run(){
        System.out.println("hello world"); //線程的函數體
    }
}

public class Test{
    public static void main(String[] args){
        MyThread myThread=new MyThread();
        thread.start();     //開啓線程
    }
}

其中,start()方法是一個native方法,它將啓動一個新的線程,並執行run()方法。需要注意的是,調用start()方法後並不是立即執行多線程代碼,而是是的該線程變爲可運行態,至於什麼時候運行,由操作系統決定。

2、實現Runnable接口,實現run()方法。

主要步驟:(1)、自定義類並實現Runnable接口,實現run()方法。(2)、創建Thread對象,將自定義類的對象作爲參數實例化Thread對象。(3)、調用Thread的start方法。

class MyThread implements Runnable{ //創建線程類
    public void run(){
        System.out.println("Hello World");
    }
}

public class Test{
    public static void main(String[] args){
        MyThread thread=new MyThread();
        Thread t=new Thread(thread);   //自定義實現Runnable對象作爲參數實例化Thread對象
        t.start();            //開啓線程
    }
}

3、使用Executor

Executor是JAVA SE5提供的爲你管理Thread對象的執行器,主要目的是爲了簡化併發編程,並且可以返回結果。Executor,Callable、Future都屬於Executors框架中功能類。Executor在客戶端和任務執行之間提供了一個間接層,與客戶端直接執行任務不同,這個中介將執行任務。而在JAVA語言中,Excutor是一個接口,如果需要執行器服務,則需要藉助Executors這個類(有點類似於Collection與Collections的關係)。這種方式來實現線程需要首先實現Callable接口,重寫call()方法,然後調用Executors的新建線程池的方法獲取ExecutorService,通過ExecutorService來獲取Future對象,然後通過Future對象的get方法就可以獲取Callable返回的Object了。

class MyExecutors implements Callable<String>{  //實現Callable接口

	@Override
	public String call() throws Exception {     //實現call方法,返回String類型。
		// TODO Auto-generated method stub
		return "Hello World";
	}
	
}

public class TestExecutors {

	public static void main(String[] args) throws InterruptedException, ExecutionException{
		
		// 通過Executors類中的方法來獲取一個線程池,提供執行器(Executor)服務 
		ExecutorService exec=Executors.newCachedThreadPool();
		//submit()方法會產生Future對象,它用Callable返回結果的特定類型進行參數化。
		Future<String> future=exec.submit(new MyExecutors());
		//通過future對象的get方法來獲取結果。
		System.out.println(future.get());
	}
	
}


發佈了24 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章