Java學習總結

Java學習總結(二)

關於進程以及線程

進程的定義:程序的一次執行。
線程的定義:線程是在進程基礎上進一步的劃分。
提到進程就不得不提到Linux操作系統,在Linux操作系統下,進程分爲三種:
一、交互進程:由shell啓動,既可以在前臺運行。也可以在後臺運行。
二、監控(守護)進程:在系統的後臺運行,隨着操作系統的啓動而啓動。
三、批處理進程:與終端沒有聯繫,是一個進程序列。

在Linux下,進程可以用命令PS(靜態)、PSTREE(相關性)、TOP(動態)命令進行查看。命令後添加&符號能將命令進程放入後臺進行執行。想要查看後臺的進程,可以用jobs進行操作。此外FG、BG、kill命令可以通過添加%+任務編號或者PID,選擇進程在前臺、後臺、或者是殺死執行的進程。

此外,注意兩個重要概念:
一、殭屍進程:子進程退出後,父進程並沒有調用wait/waitpid,子進程的描述符還保留在系統之中。
二、孤兒進程:子進程沒有退出、父進程先退出了,此時子進程會被系統進程即init接管。

thread與runnable接口

在JAVA中,實現多線程的方法有兩種,其一爲繼承thread類,其二爲實現runnable接口。所有的操作中都要複寫類或者接口中的run方法。但要想正確啓動多線程,調用的是其中start()方法。源代碼展示如下:

public synchronized viod start(){
    if (threadStatus!=0)
        throw new illegalThreadStateException();
        ...
        start0();
        ... 
}
public native void start0();

此處真正調用的是start0方法。因爲線程的運行需要本機的操作系統支持(參見native關鍵字),所以啓動線程不能直接使用run方法。
若需要共享資源則最好實現其中的runnable接口。實際操作中也偏向於runnable,相比於thread:
1、克服了Java單繼承所帶來的侷限性。
2、資源共享
3、thread類也是runnable接口的子類,但未完全實現runnable中的run方法。

線程的狀態

線程一般有物種狀態,分別是:創建(new)、就緒(start)、運行(run)、堵塞(sleep、suspend、wait)、以及死亡(stop)
在默認狀態下,主方法的優先級別爲5(中等優先級)。Java中線程優先級分爲三等。
在Linux的進程調度中,系統對於pri的數值是由內核動態調整的,而且pri數值越低表示進程的優先級別越高。用戶沒有辦法進行修改,若想涉及進程的優先級,需要通過修改nice關鍵字(-20~19)通過公式:
pri(new)=pri(old)+nice
來進行調整。調整命令爲:
nice [-n 調整數值] command
renice [調整數值] command

同步與死鎖

Java中同步與死鎖是通過同步代碼塊:
sychronized(同步對象){
    //需要同步的代碼塊;
}

或者是同步方法:synchronized 方法返回值 方法名稱(參數列表){}完成。
隨後關於鎖的問題會在我知識拓展到Java虛擬機後展開詳細的講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章