Thread的建立與執行
阿新 • • 發佈:2018-12-18
什麼是執行緒(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());