日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SCJP 线程基础

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SCJP 线程基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一.什么是線程?
    • 二.兩種創建線程的方式:
    • 三.實例化和啟動一個線程
    • 四.線程的生命周期
    • 五.何時線程會被阻止運行
    • 六.Java線程的優先級
    • 七.為什么我們需要wait/notify法則?
    • 八.關鍵字synchronized

一.什么是線程?

我們可以用一個生活中的例子來理解它:
在我們生活中我們要做很多不同的事情,對于我們而言,每一件事都可以影響我們生活進程。
上述的每一件事就是每一個線程,我們就是那個程序。

線程表面上看似和主程序并行運行的進程,但和進程不同的是它可以與程序的其他部分共享存儲空間和數據。

二.兩種創建線程的方式:

1.實現Runnable接口
例子:

class MyClass implements Runnable{public void run(){ //當你需要在一個類里面創建一個某種用途的線程的時候,我們需要將自己的東西寫在這里 } } public static void main(String[] arvgs) { MyClass mc=new MyClass(); Thread t=new Thread(mc); t.start(); }

上述是使用Runnable創建線程的大致過程

2.直接使類繼承Thread
這樣做雖然簡單,但也有一定的局限性,我們知道java只支持單繼承。如果我們的某個對象繼承了Thread,就不能繼承其他類了,或者我們要線程化的對象已經繼承了其他類,這時我們不得不在繼承方面再想辦法了。所以我們不提倡用這個方法

三.實例化和啟動一個線程

盡管在線程中運行的方法是run(),但我們并不需要調用這個方法來啟動一個線程,而是調用start(); 方法來啟動一個線程。原因是線程具有生命周期。

四.線程的生命周期

任務在線程中執行,線程可以是以下5中狀態:
1.新建
2.就緒
3.運行
4.阻塞
5.結束
他們的關系如下圖:

五.何時線程會被阻止運行

一.線程阻塞:
1.線程已經被設置了一定長度的睡眠時間sleep();
2.調用了 suspend() 方法,它將一直保持阻塞直到 resume() 方法被調用
3.該線程因為被調用了 wait() 方法被暫停,當收到notify或者notifyAll消息的時候重新激活。

二.使用Thread包中的yield方法

在Thread包里面構造了一個靜態的名為 yield() 的方法可以讓當前正在運行的線程讓出正在占用的CPU周期返回準備運行的狀態。如果沒有其他的線程,則立馬回到運行狀態。

三.限制/搶占
每一個線程都有一個設定好的CPU占用周期來運行。一旦它用完了設定好的CPU占用周期,它將停止占用CPU讓其他等待的線程獲得CPU。

四.優先級系統
在多個線程正在運行的時候一個相對來說最高優先級的線程突然插入,它將直接獲得CPU,其他線程被迫停止。

六.Java線程的優先級

我們可以通過Thread包中的 Thread.setPriority 來設置線程的優先級,通過 getPriority() 來獲得線程的優先級,一個新建線程的默認優先級是Thread.NORM_PRIORITY.

七.為什么我們需要wait/notify法則?

編寫代碼的時候使用同步的wait,notify和notifyAll方法,以防止并行讀取問題的發生,同時保證各個線程之間的正常通信。

八.關鍵字synchronized

此關鍵字可以用在標記一段聲明或者鎖定一段代碼,保證在同一時間只有一個線程能夠運行它的實例。wait和notify應該放在此關鍵字標記的代碼中來保證當前代碼在監視器的監控之中。

總結

以上是生活随笔為你收集整理的SCJP 线程基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。