有關線程的筆記

  • 每創建一個線程都要消耗內存,每個線程都有自己的棧空間(大約1 M),也就是說每創建一個線程,操作系統就會給該線程分配1 M的空間。而且當線程執行完時間片後需要把數據保存至內存或硬盤中,下一個線程執行時又要從內存或硬盤中取出對應自己的數據,這麼一存一取也很耗時間。這就是爲什麼線程開太多的話,會導致執行任務所花費的時間更多的原因。
  • Thread和Runnable不是一對一的關係,而是一對多的關係。比如線程池裏的線程就總是有限個,但是Runnable卻可以有多個,丟給Thread執行。
  • Thread的isInterrupted與static的interrupted的區別在於static方法調用後如果返回true,那麼內部會將該boolean值又改回false。而isInterrupted不會。
  • Join方法可以讓兩個線程順序執行
  • 當一個Thread調用sleep()或wait()方法後,若其它線程調用該線程的interrupt()的話,這兩個方法就會拋出InterruptedException。但是拋出異常後,它們又會把這個中斷標誌位重新置爲false。
  • 線程A調用yield後,會從運行狀態轉爲就緒狀態。讓操作系統去調用其它的線程,當然操作系統可能又會再調起線程A
  • 在這裏插入圖片描述
  • 如果想在Runnable的run方法中中斷線程,可以如下:
class TestRunnable implements Runnable {
		public void run() {
				while(!Thread.currentThread().isInterrupted()) {
					...
				}
		}
}
  • 對象鎖與類鎖的區別
private synchronized void print() {//同步監視器是當前對象
		...
}

private static synchronized void print() {//同步監視器是當前類的class對象
		...
}
  • Thread的yield和sleep不會釋放鎖。wait會釋放鎖
  • Callable要學習下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章