第一題:線程的基本概念、線程的基本狀態及狀態之間的關係?
Java中的線程的生命週期大體可分爲5種狀態。
①NEW:這種情況指的是,通過New關鍵字創建了Thread類(或其子類)的對象
②RUNNABLE:這種情況指的是Thread類的對象調用了start()方法,這時的線程就等待時間片輪轉到自己這,以便獲得CPU;第二種情況是線程在處於RUNNABLE狀態時並沒有運行完自己的run方法,時間片用完之後回到RUNNABLE狀態;還有種情況就是處於BLOCKED狀態的線程結束了當前的BLOCKED狀態之後重新回到RUNNABLE狀態。
③RUNNING:這時的線程指的是獲得CPU的RUNNABLE線程,RUNNING狀態是所有線程都希望獲得的狀態。
④DEAD:處於RUNNING狀態的線程,在執行完run方法之後,就變成了DEAD狀態了。
⑤BLOCKED:這種狀態指的是處於RUNNING狀態的線程,出於某種原因,比如調用了sleep方法、等待用戶輸入等而讓出當前的CPU給其他的線程。
處於RUNNABLE狀態的線程變爲BLOCKED狀態的原因,除了該線程調用了sleep方法、等待輸入原因外,還有就是在當前線程中調用了其他線程的join方法、當訪問一個對象的方法時,該方法被鎖定等。
相應的,當處於BLocked狀態的線程在滿足以下條件時就會由該狀態轉到RUNNABLE狀態,這些條件是:sleep的線程醒來(sleep的時間到了)、獲得了用戶的輸入、調用了join的其他線程結束、獲得了對象鎖。
一般情況下,都是處於RUNNABLE的線程和處於RUNNING狀態的線程,互相切換,直到運行完run方法,線程結束,進入DEAD狀態。資源。
第二題:線程與進程的區別?
1.進程是應用程序在處理機上的一次執行,他是一個動態的概念,而線程是進程的一部分,進程包含多個進程運行。
引入線程帶來的主要好處:
(1) 在進程內創建、終止線程比創建、終止進程要快;
(2) 同一進程內的線程間切換比進程間的切換要快,尤其是用戶級線程間的切換。
第三題:多線程有幾種實現方法,都是什麼?
多線程(jave中)
1. 繼承 Thread 類
2. 實現 Runnable 接口再 new Thread(YourRunnableOjbect)
線程同步
1. 用 synchronized 修飾需要同步的方法
2. 用 synchronized 塊包圍需要同步的語句
在Windows中,線程同步機制可以通過臨界區、互斥量、信號量、事件來實現,還可以使用消息循環。