java執行緒學習

以神之諭發表於2015-12-12
java執行緒學習
一.概念辨析
 1.程式:是一個正在進行中的程式
         每一個程式執行都有一個執行順序。該順序是一個執行路徑(執行情景),或者叫一個控制單元。
 2.執行緒:程式中一個獨立的控制單元
           執行緒在控制著程式的執行
         一個程式至少有一個執行緒
 3.多執行緒
   一個程式中有多個執行路徑,這多個執行路徑可以完成相同的功能,也可以完成不同的功能。


舉個例子:::
class Demo extends Thread
{
    public void run(){
    for(int i=0;i<50;i++){
     System.out.println("thread:"+i);
     }
    }
}
public class Demo_01
{
    public static void main(String args[]){
    //例項化一個物件,就以為意味著建立了一個執行緒
     Demo d = new Demo();
     d.start();

     for(int i=0;i<40;i++){
      System.out.println("Hello World:"+i);
     }
    }
}

二、疑問
1.發現每次執行結果都不一樣的原因

       因為多個執行緒都在獲取cpu的執行權,cpu執行到那個執行緒,當前執行緒就執行。我把這個稱為“cpu的任性”。cpu在高速切換中,在每個執行緒上停留時間也是隨機的。

2.run()方法和start()方法的區別--面試要點
舉個例子:

class Thread_01 extends Thread{                                              
  public void run(){
     for(int i=0;i<=40;i++){
     System.out.println("thread_01"+i);
     }
   }
  }
public class Demo_01
{
  public static void main(String args[]){
    Thread_01 t= new Thread_01();
    t.start();//啟動執行緒,並執行執行緒中定義的run()
  //主執行緒main中的程式碼
   for(int i=0;i<30;i++){
     System.out.println("主執行緒main():執行中"+i);
     }

  }
}
執行結果:
交替輸出,且每次輸出的結果都不一樣的
-------------------------------------------------------------
demo_02:


class Thread_02 extends Thread{                                              
  public void run(){
     for(int i=0;i<=40;i++){
     System.out.println("thread_01"+i);
     }
   }
  }
public class Demo_01
{
  public static void main(String args[]){
    Thread_01 t= new Thread_01();
    t.run();//只是相當於普通的物件呼叫方法而已,執行緒是建立了,但是沒有start()方法啟動,執行路徑不存在,所以還是以main()方法的駐現場執行的程式碼
  //主執行緒main中的程式碼
   for(int i=0;i<30;i++){
     System.out.println("主執行緒main():執行中"+i);
     }

  }
}
執行結果:
thread_01
thread_02
thread_03...
thread_029
主執行緒main():執行中1
主執行緒main():執行中2
...
主執行緒main():執行中29


總結:
start():啟動執行緒,並執行run()方法中的程式碼;
run():如果只是單純的呼叫run(),那麼與普通的物件呼叫方法的原理是沒有區別的。
三、建立執行緒的方法
  1.繼承Thread類,覆蓋或者重寫run()方法
   步驟:
             1.定義類繼承Thread類
              2.覆蓋(重寫)run()方法(目的:自定義執行緒要執行的程式碼)
              3.物件呼叫start()方法,開啟執行緒
               注意:開啟執行緒,並執行run()方法(這裡的執行,並不一定就是立刻執行,有這個可能,cpu的“任性”---如果人品好。可能就會看到立刻執行的效果)


2:待新增。。




















相關文章