java Thread類 線程學習 一

線程中的7種很是重要的狀態:(有的書上也認爲只有前五種狀態:而將"鎖池"、"等待池" java

都當作是"阻塞"狀態的特殊狀況:這種認識也是正確的,可是將"鎖池"和"等待池"單獨分併發

離出來有利於對程序的理解)
一、初始狀態、線程建立、線程對象調用start()方法。ide

二、可運行狀態、也就是等待Cpu資源、等待運行的狀態。spa

三、運行狀態、得到了Cpu資源,正在運行狀態。線程

四、阻塞狀態、也就是讓出Cpu資源、進入一種等待狀態、而不是可運行狀態、有三種對象

狀況會進入阻塞狀態。
     1)、如等待輸入(輸入設備進行處理、而Cpu不處理)、則放入阻塞、直到輸入完畢、繼承

阻塞結束後會進入可運行狀態。
     2)、線程休眠、線程對象調用sleep()方法、阻塞結束後會進入可運行狀態。
     3)、線程對象2調用線程對象1的join()方法、那麼線程對象2進入阻塞狀態、直到線接口

程對象1停止。隊列

五、停止狀態、也就是執行結束。資源

六、鎖池狀態。

七、等待隊列。

線程的優先級:
    線程的優先級表明該線程的重要程度、當有多個線程同時處於可執行狀態並等待得到

CPU時間時、線程調度系統根據各個線程的優先級來決定給誰分配CPU時間、優先級高

的線程有更大的機會得到CPU時間、優先級滴的線程也不是沒有機會、只是機會要小一

些罷了。
     你能夠調用Thread類的方法getPriority()和setPriorty來存取線程的優先級、線程的

優先級介於1(MIN_PRIORITY)和10(MAX_PRIORITY)之間、缺省是5

(NORM_PRIORITY)。

直接繼承Thread類:

  
  
           
  
  
  1. package com.boxun.hzw.test;   
  2.    
  3. /**  
  4.  * 直接繼承Thread類  
  5.  * @author Administrator  
  6.  *  
  7.  */   
  8. public class TestTTT extends Thread {   
  9.        
  10.     public int count = 1 ,number ;   
  11.        
  12.     public TestTTT(int num){   
  13.         number = num ;   
  14.     }   
  15.        
  16.     /*  
  17.      * 必須覆蓋Thread類的run方法  
  18.      * Thread類提供咱們的線程所要執行的代碼、  
  19.      * 爲了指定我本身的代碼、只須要覆蓋它  
  20.      * @see java.lang.Thread#run()  
  21.      */   
  22.     public void run(){   
  23.         while(true){   
  24.             System.out.println("線程:"+number+"---計數:"+count++);   
  25.             /*  
  26.              * 這裏能夠運行++count == 雙數(偶數2/4/6/8)看看會出現死循環  
  27.              * 緣由——System.out.println()中count++了一次、本來是1變爲二、下面++count在讓2變爲三、  
  28.              * 按照這個規律偶數永遠不能被判斷到、因此一直跑下去、  
  29.              */   
  30.             if(++count == 11return ;   
  31.         }   
  32.     }   
  33.        
  34.     /**  
  35.      * @param args  
  36.      */   
  37.     public static void main(String[] args) {   
  38.             /*  
  39.              * start()方法  
  40.              * 使該線程開始執行;  
  41.              * Java 虛擬機調用該線程的 run 方法。  
  42.              * 結果是兩個線程併發地運行;當前線程(從調用返回給 start 方法)和另外一個線程(執行其 run 方法)。   
  43.              * 屢次啓動一個線程是非法的。特別是當線程已經結束執行後,不能再從新啓動。  
  44.              *   
  45.              */   
  46.             new TestTTT(1).start();   
  47.     }   
  48. }  
實現Runnable接口建立線程:

  
  
           
  
  
  1. package com.boxun.hzw.test;   
  2.    
  3. /**  
  4.  * Runnable接口:  
  5.  * 裏面只有一個方法、run。  
  6.  *   
  7.  * @author Administrator  
  8.  *  
  9.  */   
  10. public class ThreadTest implements Runnable {   
  11.     int count = 1 ,number ;   
  12.     public static void main(String[] args) {   
  13.         ThreadTest t = new ThreadTest();   
  14.         for (int i = 0; i < 5; i++) {   
  15.             t.number = i +1 ;   
  16.             new Thread(t).start();   
  17.         }   
  18.     }   
  19.    
  20.     /*  
  21.      * 使用實現接口 Runnable 的對象建立一個線程時,啓動該線程將致使在獨立執行的線程中調用對象的 run 方法。  
  22.      * @see java.lang.Runnable#run()  
  23.      */   
  24.     public void run() {   
  25.         while (true) {   
  26.             System.out.println("線程:"+number +"計數:"+count++);   
  27.             if(count == 5){ count = 1 ; return ;}   
  28.         }   
  29.     }   
  30.    
  31. }   
相關文章
相關標籤/搜索