標籤:機制 java 並且 操作 筆記 windows 協同式 硬碟 開啟
綜述:下面寫的是我學習java線程時做的一些筆記和查閱的一些資料總結而成。大多以問答的形式出現。
一、什麼是線程?
答:線程是一個輕量級的進程,現在作業系統中一個基本的調度單位,而且線程是彼此獨立執行的,線程從本質上來說是資料的一次運行活動,是作業系統分配資源和調度的一個單位。java中的線程是運行在進程內的,就像jvm其實是一個java進程。調用線程的方式有協同式,搶佔式。
進程和進程之間資源是不可共用的,例如我們用一個進程開啟一個world文檔,第二個進程也許能夠查看它,但是不能更改,有時連查看也不能查看,這種情況在windows作業系統中很常見,比如開啟一個world,又想刪除這個world就會提示這個檔案已經被佔用,是不能刪除的,這是進程一個非常大的特點,它的資源是獨享的,相互之間不可以共用。
而線程運行在進程的內部,凡是這個進程佔用的資源,那麼線程和線程之間是可以共用的,,那麼就會形成線程和線程之間相互去訪問,同一個資源的狀況,發生一些平時遇不到的事情,java的jvm中後台日誌,其實就是多個線程交替去寫的,這就是在進程內部資源共用的一個例子之一,當然連接埠號碼也是,tomcat監聽的是8080連接埠號碼,http請求返回後,就會啟動一個線程,其實是有一個線程一直在監聽它,其實是可以形成一個資源共用的情況,但是事實上,如果第二tomcat監聽同一個連接埠號碼,這個時候就會報錯。
線程其實挺耗費資源的,
線程會有環境切換:即使是在單核cpu也支援多線程的,cpu通過給每個cpu分配時間片來實現這個機制。時間片是cpu分配給各個線程的時間,因為時間非常短,所以cpu通過不 停的切換線程執行,時間片一般是幾十毫秒,cpu通過時間片分配演算法來執行任務,一個時間片後,會切換到下一個任務,但是在切換時會儲存上一個任務的狀態,從任務儲存到再載入的過程就是一次環境切換,環境切換,就像讀書時,停止讀書後,記下停止讀的位置,又從新從那讀會影響多線程的執行速度。
核心態:cpu通過訪問記憶體所有資料,包括外圍裝置,例如硬碟,網卡,cpu也可以將自己從一個程式切換到另一個程式。
使用者態:只能受限的訪問記憶體,並且不能訪問外圍裝置,佔用cpu的能力被剝奪,cpu資源可以被其他程式擷取。
java線程day-01