麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

歡迎使用CSDN-markdown編輯器

2019-11-10 19:19:23
字體:
來源:轉載
供稿:網友

java線程

線程是指進程中的一個執行流程,一個進程中可以運行多個線程。線程總是屬于某個進程,進程中的多個線程共享進程的內存。

概念及類別:

線程總體分兩類:用戶線程和守護線程。

守護線程概念:后臺線程主要是為其它線程(相對可以稱之為前臺線程)提供服務,或”守護線程”。如JVM中的垃圾回收線程。 生命周期:當所有的前臺線程都進入死亡狀態時,后臺線程會自動死亡

生命周期及五種基本狀態:

關于Java中線程的生命周期,首先看一下下面這張較為經典的圖:

新建狀態(NEW): 當線程對象創建后即進入了新建狀態。 就緒狀態(Runnable): 當調用線程對象的Start()方法,線程即進入就緒狀態。處于就緒狀態的線程只是說明此線程已經做好了準備,隨機等待CPU調度執行,并不是說執行了Start()此線程立即就會執行。 運行狀態(Running): 當CPU開始調度處于就緒狀態的線程時,此線程才真正執行,即進入運行狀態。 阻塞狀態(Blocked): 處于運行狀態中的線程由于某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態才有機會再次被CPU調用以進入到運行狀態。根據阻塞產生的原因不同,阻塞狀態又可以分為三種: 1、等待阻塞:運行狀態中的線程執行wait()方法,使本線程進入到等待阻塞狀態。 2、同步阻塞:線程在獲取Synchronized同步鎖失?。ㄒ驗殒i被其它線程鎖占用),它會進入同步阻塞狀態。 3、其它阻塞:通過調用線程的Sleep()或join()或發出了I/O請求時,線程會進入阻塞狀態。當Sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。 死亡狀態(Dead): 線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

線程創建方式

1、繼承Tread類,重寫該類的run()方法。 2、實現Runnable接口,并重寫該接口的run()方法。 3、使用Callable和Future接口創建線程,具體是創建Callable接口的實現類并實現call()方法。并使用FutureTask類來包裝Callable實現類的對象。

線程同步

同步方法

即有sychronized關鍵字修飾的方法,由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處于阻塞狀態。

同步代碼塊

即有sychronized關鍵字修飾的語句塊,被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步。

使用特殊域變量(volatile)實現線程同步

volatile關鍵字為域變量的訪問提供了一種免鎖機制,使用volatile修飾域相當于告訴虛擬機該域可能會被其它線程更新,因此每次使用該域就要重新計算而不是使用寄存器中的值。volatile不會提供任何原子操作,它也不會用來修飾final類型的變量

使用重入鎖實現線程同步

ReentrantLock類是可重入、互斥、實現了Lock接口的鎖,它與使用synchonized方法和塊具有相同的基本行為和語義,并且擴展了其能力。 ReentrantLock():創建一個ReentrantLock實例 Lock():獲得鎖 unLock():釋放鎖

使用局部變量實現線程同步

如果使用ThreadLocal管理變量,則每一個使用該變量的線程都獲得該變量的副本,副本之間互相獨立,這樣每一個線程都可以隨意修改自己的變量副本,而不會對其它線程產生影響。 ThreadLocal():創建一個線程本地變量 get():返回此線程局部變量的當前線程副本中的值 initialValue():返回此線程局部變量的當前線程的”初始值” set(T value):將此線程局部變量的當前線程副本中的值設置為value

使用阻塞隊列實現線程同步

前面5種同步方式都是在底層實現的線程同步,但是我們在實際開發當中,應當盡量遠離底層結構。使用java.util.concurrent包將有助于簡化開發。 LinkedBlockingQueue是一個基于已連接節點的,范圍任意的blocking queue.隊列是先進先出的順序(FIFO) put(E e):在隊尾添加一個元素,如果隊列滿則阻塞 size():返回隊列中的元素個數 take():移除并返回隊頭元素,如果隊列空則阻塞

使用原子變量實現線程同步

需要使用線程同步的根本原因在于對普通變量的操作不是原子的。 原子操作就是指將讀取變、修改變、保存變量值看成一個整體來操作,即這幾種行為要么同時完成,要么都不完成。 Atomiclnteger表可以用原子方式更新int的值,可用在應用程序中(如以原子方式增加的計數器),但不能用于替換Integer;可擴展Number,允許那些處理機域數字類的工具和實用工具進行統一訪問。 addAddGet(int dalta):以原子方式將給定值與當前值相加 get():獲取當前值


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91短视频网页版 | 成人免费网视频 | 在线观看一区二区三区四区 | 国产精品久久久久一区二区 | 黄网站免费入口 | 久久精品国产99久久久古代 | 一级在线免费观看视频 | 视频一区二区中文字幕 | 欧美性videofree精品 | 黄污在线观看 | 久久狠狠高潮亚洲精品 | av免费提供| 圆产精品久久久久久久久久久 | 国产精品一区二av18款 | 宅男噜噜噜66国产免费观看 | 成人一级免费视频 | 欧美日韩免费看 | 午夜精品久久久久久久久久久久久蜜桃 | 亚洲情在线 | freexxx69性欧美hd | 欧美自拍| 欧美成人se01短视频在线看 | 国产精品免费久久久久久 | 免费看真人a一级毛片 | 黄色片在线观看网站 | 精品一区二区三区网站 | 亚洲爱爱网站 | 综合图区亚洲 | 国产成人高清在线观看 | 国产精选电影免费在线观看 | 97中文字幕第一一一页 | 久久艳片 | 成人视屏在线 | 久久毛片免费观看 | 国产亚洲精品成人 | 女女久久 | 免费看搡女人无遮挡的视频 | 综合图区亚洲 | 特大黑人videos与另类娇小 | videos真实高潮xxxx | 亚洲国产网站 |