java 執行緒詳解及執行緒與進程的差異
1.進程與執行緒
每個進程獨享一塊記憶體空間,一個應用程式可以同時啟動多個進程。例如IE瀏覽器,開啟一個Ie瀏覽器就等於啟動了一個進程。
執行緒指進程中的一個執行流程,一個行程可以包含多個執行緒。
每個進程都需要作業系統為其分配獨立的記憶體空間,而同一個進程中的多個執行緒共享這塊空間,即共享記憶體等資源。
每次呼叫java.exe的時候,作業系統都會啟動一個Java虛擬機進程,當啟動Java虛擬機進程時候,Java虛擬機都會建立一個主執行緒,該執行緒會從程式入口main方法開始執行。
Java虛擬機每啟動一個線程,就會給該線程分配一個線程方法棧,用來存放相關資訊(例如局部變數等),線程就在這個棧上運行。所以Java物件中的局部變數都是執行緒安全的,但實例變數及類別變數由於不是保存在堆疊中,所以不是執行緒安全的。
進程有三種狀態:就緒、執行、阻塞。
2.執行緒建立方式
Runnable方式:(此種方式靈活,建議使用)
public class Thread02 implements Runnable { public static void main(String[] args) { Runnable r = new <strong>Thread02</strong>(); Thread t1 = new Thread(<strong>r</strong>, "t1"); /** * Thread源码 * public Thread(Runnable target, String name) { init(null, target, name, 0); } */ Thread t2 = new Thread(r, "t2"); t1.start(); // 启动线程t1,处于就绪状态,等待cpu t2.start(); // 启动线程t2,处于就绪状态,等待cpu t1.run(); // 主线程main调用对象t1的run方法 } public void run() { System.out.println("thread's name is " + Thread.currentThread().getName()); } }
thread's name is t1 thread's name is main thread's name is t2