為什么要使用多線程?
1. 使用更多的處理器核心
2. 更快的響應時間
3. 更好的編程模型
線程優先級
在Java線程中,通過一個整型成員變量priority來控制優先級,優先級的范圍從1-10。
線程的狀態:NEW / RUNNABLE / BLOCKED / WAITING / TIME_WAITING /TERMINATED一共6種狀態
Deamon線程是一種支持型線程,因為它主要被用作程序中后臺調度以及支持性工作。這意味著當一個Java虛擬機中不存在非Deamon線程的時候,java虛擬機將會退出??梢酝ㄟ^set方法將線程設置為Deamon線程。(注意其finally可能不會被執行)
-->啟動和終止線程
通過調用線程的start()方法進行啟動。
構造線程:一個新構造的線程對象是由其parent線程來進行空間分配的,而child線程繼承了parent是否為Deamon、優先級和加載資源的contextClassLoader等。初始化完成后在堆內存中等待運行。
啟動線程:線程對象在初始化完成后調用start()方法就可以啟動這個線程。start()方法的含義是:當前線程(parent線程)同步告知java虛擬機,只要線程規劃器空閑,應立即調用start()方法的線程
理解中斷:中斷可以理解為線程的一個標志位屬性,它表示一個運行中的線程是否被其他線程進行了中斷操作。其他線程通過調用該線程的interrupt()方法對其進行中斷操作。
過期的suspend() / resume() / stop()(為什么過期了?)不建議使用的原因主要是以suspend()方法為例,在調用后,線程不會釋放已經占用的資源(比如鎖),而是占用著資源進入睡眠狀態,這樣容易引發死鎖問題
如何安全地終止線程?使用中斷。中斷操作是一種簡便的線程間的交互方式,而這種交互方式最適合用來取消或者停止任務。除了中斷以外還可以利用一個boolean變量來控制是否需要停止任務并終止該線程。
main線程通過中斷操作和cancle()方法均可使CountThread得以終止。這種通過標志位或者中斷操作的方式能夠使線程在終止時有機會去清理資源,而不是武斷地將線程停止,因此這種終止線程的方法更加安全,優雅。