首頁  >  文章  >  Java  >  java執行緒詳解及執行緒與進程的區別

java執行緒詳解及執行緒與進程的區別

高洛峰
高洛峰原創
2017-01-19 11:25:461516瀏覽

java  執行緒詳解及執行緒與進程的差異

1.進程與執行緒

   每個進程獨享一塊記憶體空間,一個應用程式可以同時啟動多個進程。例如IE瀏覽器,開啟一個Ie瀏覽器就等於啟動了一個進程。

   執行緒指進程中的一個執行流程,一個行程可以包含多個執行緒。

   每個進程都需要作業系統為其分配獨立的記憶體空間,而同一個進程中的多個執行緒共享這塊空間,即共享記憶體等資源。

   每次呼叫java.exe的時候,作業系統都會啟動一個Java虛擬機進程,當啟動Java虛擬機進程時候,Java虛擬機都會建立一個主執行緒,該執行緒會從程式入口main方法開始執行。

  Java虛擬機每啟動一個線程,就會給該線程分配一個線程方法棧,用來存放相關資訊(例如局部變數等),線程就在這個棧上運行。所以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&#39;s name is "
        + Thread.currentThread().getName());
  }
  
}

運行結果:thread's name is Thread-0

注意:每次程式執行時除了自訂的執行緒外還有一個main執行緒。

 綜合:

thread&#39;s name is t1
thread&#39;s name is main
thread&#39;s name is t2

   

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多java線程詳解及線程與進程的區別相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn