一、執行緒概念:
1.執行緒:程式中單獨順序的控制流
執行緒本身依靠程式進行執行
執行緒是程式中的順序控制流,只能使用分配給程式的資源和環境
2.程序:執行中的程式
乙個程序可以包含乙個或多個執行緒
乙個程序至少要包含乙個執行緒
3.單執行緒:程式中只存在乙個執行緒,實際上主方法就是乙個主線程
4.多執行緒:多執行緒是乙個程式中執行多個任務
多執行緒的目的是更好的使用cpu資源
二、執行緒的狀態:
建立狀態:準備好了乙個多執行緒的物件;
就緒狀態:呼叫了start()方法,等待cpu排程;
執行狀態:執行run()方法;
阻塞狀態:暫時停止執行,可能將資源交給其他執行緒使用;
終止狀態(死亡狀態):執行緒銷毀;
三、執行緒常用方法:
1.取得執行緒名稱getname()
2.取得當前執行緒物件currentthread()
3.判斷執行緒是否啟動isalive()
4.執行緒的強行執行join()
5.執行緒的休眠sleep()
6.執行緒的禮讓yield()
四、執行緒的同步與死鎖:
1.同步**塊
在**塊上加上"synchronized"關鍵字,則此**塊就稱為同步**塊
2.同步**塊格式
synchronized(同步物件)
3.同步方法
除了**塊可以同步,方法也可以同步的
4.方法同步格式
synchronized void 方法名稱(){}
執行緒的同步經典示例:
模擬某車站有三個視窗同時賣票,總票數為10張,賣完為止,**如下:
//賣票執行緒
class mythread implements runnable catch (exception e)
system.out.println("剩餘票數:" + --ticket);
} else
} }}public class test001
}
程式執行結果如下:
視窗一賣掉一張票...
剩餘票數:9
視窗三賣掉一張票...
剩餘票數:8
視窗二賣掉一張票...
剩餘票數:7
視窗一賣掉一張票...
剩餘票數:6
視窗三賣掉一張票...
剩餘票數:5
視窗二賣掉一張票...
剩餘票數:4
視窗三賣掉一張票...
剩餘票數:3
視窗一賣掉一張票...
剩餘票數:2
視窗二賣掉一張票...
剩餘票數:1
視窗一賣掉一張票...
剩餘票數:0
視窗三賣掉一張票...
剩餘票數:-1
視窗二賣掉一張票...
剩餘票數:-2
因為三個視窗是併發賣票,所以當票只剩下一張的時候,三個視窗同時去賣它,就會造成剩餘票數變成負數,這個時候就需要同步的訪問這個車票資源來解決這個問題,**修正後如下:
//賣票執行緒
class mythread implements runnable catch (exception e)
system.out.println("剩餘票數:" + --ticket);
} else
}} }
}public class test001
}
程式執行結果如下:
視窗一賣掉一張票...
剩餘票數:9
視窗一賣掉一張票...
剩餘票數:8
視窗一賣掉一張票...
剩餘票數:7
視窗三賣掉一張票...
剩餘票數:6
視窗三賣掉一張票...
剩餘票數:5
視窗三賣掉一張票...
剩餘票數:4
視窗二賣掉一張票...
剩餘票數:3
視窗二賣掉一張票...
剩餘票數:2
視窗二賣掉一張票...
剩餘票數:1
視窗二賣掉一張票...
剩餘票數:0
java多執行緒
在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...
Java 多執行緒
1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...
JAVA 多執行緒
為hashmap的不正確使用所導致。hashmap在多執行緒環境下使用不安全。使用靜態hashmap作為聯絡人資料快取,key為手機號碼.private static maplxrdata new hashmap 多執行緒環境下不同步hashmap可能導致如下問題 1 多執行緒put操作後可能導致g...