併發系列(五)-----執行緒詳解
阿新 • • 發佈:2018-12-10
一 簡介
執行緒這個話題,不管是在面試中還是在工作中會經常的遇見。而併發程式設計的目的就是為了在儘量不影響程式的執行效率的情況下保證資料的安全性和正確性。要想理解執行緒首先要明白一些概念性的東西。
程序:具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.
執行緒:程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.
一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間
二 執行緒的狀態
執行緒的生命週期中存在的狀態有新建、就緒、執行、阻塞、死亡。Java將作業系統中的執行和就緒兩個狀態合併稱為執行狀態。Java執行緒在執行的生命週期中可能處於下表所示的6種不同的狀態,在給定的一個時刻,執行緒只能處於其中的一個狀態。
在Java中執行緒的變化以及Java對應的方法如下圖
在上圖中執行緒的狀態的變化以及操作執行緒的方法全部列出來了,有的是Object的方法有的是Thread的方法,有的是concurrent包下的一些方法。
三 執行緒的新建
執行緒的建立有的方式有三種分別是
1.通過繼承Thread重寫run方法
2.通過實現Runnable介面重寫run方法
3.通過實現Callable<T>介面重寫call方法
具體程式碼如下
/** * <p> * 類說明 * </p> * * @author Alemand * @since 2018/10/19 */ public class ThreadTest { static class Thread1 extends Thread{ @Override public void run() { super.run(); } } static class Thread2 implements Runnable{ @Override public void run() { } } static class Thread3 implements Callable<Integer>{ @Override public Integer call() throws Exception { return null; } } public static void main(String[] args) throws Exception { Thread1 thread1 = new Thread1(); thread1.start(); Thread2 thread2 = new Thread2(); thread2.run(); Thread3 thread3 = new Thread3(); Integer call = thread3.call(); } }