1. 程式人生 > >Thread的建立與執行

Thread的建立與執行

什麼是執行緒(Thread)

	執行緒 本身與程式語言沒有任何關係,而是與計算機結構中的CPU有關。
	我們經常聽到,老王的電腦是8核CPU,牛X的不要不要的。
	那麼,老王的CPU支援多少執行緒呢? long long ago ,CPU的核心執行緒比是1:1,
	我們吃的花生油一樣。後來INTEL提出了多執行緒技術,將CPU核心數與執行緒數的
	比例提升到了 1:2 。現在我們用的電腦大多數都是按照1:2的核心執行緒比來的。

執行緒是CPU排程的最小單位

   8核CPU具備16執行緒數,也就是說某一時刻執行在該CPU的執行緒數量最大是16枚。
   每一個被CPU寵幸的執行緒將在CPU上停留一段時間,愉快的搞事情,一旦時間到了
   那麼該執行緒將送回自己宮裡去

執行緒在CPU中執行的時間

	被寵幸的執行緒,將在一個CPU時間片上完成所有花樣。在規定的時間內
	沒有完成想表現的動作,也只能是含恨離開,下次再說

	關於CPU時間片的長短,取決於作業系統的規定。

執行緒從哪裡產生

	在作業系統中會為每一個執行的應用程式分配一個程序,在程序裡包含了該應用程式運
行時所需要的各種資源。
	應用程式的程序至少包含了一個執行緒,否則CPU也無法寵幸(排程)它。因為上邊已經說
過,執行緒才是CPU玩弄的物件。
	那麼,執行緒是由應用程式程序所產生的,它通過搶佔CPU時間片來使用CPU資源完成
自己要做的事情。

JAVA應用程式如何產生執行緒

Thread類

A thread

is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. 這一段是摘自Thread類的開頭註釋,它表明Thread類是在一個程式內, 在JVM主執行緒裡開闢獨立執行緒的方式,最終達到多執行緒的執行效果

三種產生執行緒的方式

直接例項化Thread類並執行它:

// 這樣就啟動了一個什麼不做的執行緒
Thread thread = new Thread() ;
thread.
start();
//覆寫Thread的RUN方法,在裡面做一些我們想做的事情
Thread thread = new Thread(){
            @Override
            public void run() {
                System.out.println(getName());
            }
        } ;
thread.start(); 

通過Runnable介面啟動執行緒:

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
            	//實現Runnable介面方法來搞事情
                System.out.println(Thread.currentThread().getName());
            }
        });
        thread.start();

通過Callable介面啟動執行緒:

		//實現Callable介面並把它包裝成Runnable介面實現類
        FutureTask futureTask = new FutureTask(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "run with CallBack and Result is callBackResult";
            }
        });
        //包裝成執行緒並啟動
        Thread callBalcThread = new Thread(futureTask) ;
        callBalcThread.start();
        //使用包裝類獲取Callable執行call()後的返回值 【阻塞】
        System.out.println(futureTask.get());