線程中的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類:
實現Runnable接口建立線程:
- package com.boxun.hzw.test;
- /**
- * 直接繼承Thread類
- * @author Administrator
- *
- */
- public class TestTTT extends Thread {
- public int count = 1 ,number ;
- public TestTTT(int num){
- number = num ;
- }
- /*
- * 必須覆蓋Thread類的run方法
- * Thread類提供咱們的線程所要執行的代碼、
- * 爲了指定我本身的代碼、只須要覆蓋它
- * @see java.lang.Thread#run()
- */
- public void run(){
- while(true){
- System.out.println("線程:"+number+"---計數:"+count++);
- /*
- * 這裏能夠運行++count == 雙數(偶數2/4/6/8)看看會出現死循環
- * 緣由——System.out.println()中count++了一次、本來是1變爲二、下面++count在讓2變爲三、
- * 按照這個規律偶數永遠不能被判斷到、因此一直跑下去、
- */
- if(++count == 11) return ;
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * start()方法
- * 使該線程開始執行;
- * Java 虛擬機調用該線程的 run 方法。
- * 結果是兩個線程併發地運行;當前線程(從調用返回給 start 方法)和另外一個線程(執行其 run 方法)。
- * 屢次啓動一個線程是非法的。特別是當線程已經結束執行後,不能再從新啓動。
- *
- */
- new TestTTT(1).start();
- }
- }
- package com.boxun.hzw.test;
- /**
- * Runnable接口:
- * 裏面只有一個方法、run。
- *
- * @author Administrator
- *
- */
- public class ThreadTest implements Runnable {
- int count = 1 ,number ;
- public static void main(String[] args) {
- ThreadTest t = new ThreadTest();
- for (int i = 0; i < 5; i++) {
- t.number = i +1 ;
- new Thread(t).start();
- }
- }
- /*
- * 使用實現接口 Runnable 的對象建立一個線程時,啓動該線程將致使在獨立執行的線程中調用對象的 run 方法。
- * @see java.lang.Runnable#run()
- */
- public void run() {
- while (true) {
- System.out.println("線程:"+number +"計數:"+count++);
- if(count == 5){ count = 1 ; return ;}
- }
- }
- }