<button id="an55y"><acronym id="an55y"><input id="an55y"></input></acronym></button>
    1. 當前位置: 首頁 / 技術分享 / 正文
      好程序員大數據培訓之線程高級部分

      2020-03-11

      好程序員 大數據培訓

      好程序員大數據培訓之線程高級部分,首先講一下線程的生命周期

      QQ截圖20200311152024

      > 對于一個線程, 在被創建后, 不是立即就進入到了運行狀態, 也不是一直處于運行狀態, 在線程的聲明周期中, 一個線程會在多種狀態之間進行切換

      >

      >  

      >

      > new : 新生狀態, 線程被實例化, 但是還沒有開始執行(start)

      >

      > runnable: 就緒狀態, 已經執行過start, 線程已經啟動了, 只是沒有搶到CPU時間片

      >

      > running: 運行狀態, 搶到了CPU時間片

      >

      > blocked: 阻塞狀態, 線程執行的過程中, 遇到一些特殊情況, 會進入阻塞狀態. 阻塞中的線程, 是不能參數時間片的搶奪的 (不能被線程調度器調度)

      >

      > dead: 死亡狀態, 線程終止

      >

      > 正常死亡 : run方法中的代碼執行結束

      >

      > 非正常死亡 : 強制使用stop方法停止這個線程

       

      臨界資源問題

      > 由于線程之間是資源共享的。如果有多個線程,同時對一個數據進行操作,此時這個數據會出現問題。

      > 如果有一個線程在訪問一個臨界資源,在訪問之前,先對這個資源上鎖,此時如果有其他的線程也需要訪問這個臨界資源,需要先查這個資源有沒有被上鎖,如果沒有被上鎖,此時這個線程可以訪問這個資源;如果上鎖了,則此時這個線程進入阻塞狀態,等待解鎖。

      同步代碼段

      > ```java

      > // 同步代碼段

      > // 小括號:就是鎖

      > // 大括號:同步代碼段,一般情況下,寫需要對臨界資源進行的操作

      > synchronized () {

      >   

      > }

      > // 關于同步鎖:可以分成兩種:對象鎖、類鎖

      > //

      > ```

      >

      同步方法

      > ```java

      > // 使用synchronized關鍵字修飾的方法就是同步方法

      > // 將一個方法中所有的代碼進行一個同步

      > // 相當于將一個方法中所有的代碼都放到一個synchronized代碼段中

      > // 同步方法的鎖:

      > // 1. 如果這個方法是一個非靜態方法:鎖是this

      > // 2. 如果這個方法是一個靜態方法:鎖是類鎖(當前類.class

      > private synchronized void sellTicket() {

      > }

      > ```

      >

      lockunlock

      > 就是一個類RenntrantLock

      #### 線程死鎖(了解)

      在解決臨界資源問題的時候,我們引入了一個""的概念。我們可以用鎖對一個資源進行保護。實際,在多線程的環境下,有可能會出現一種情況:

      > 假設有AB兩個線程,其中線程A持有鎖標記a,線程B持有鎖標記b,而此時,線程A等待鎖標記b的釋放,線程B等待鎖標記a的釋放。這種情況,叫做  **死鎖**

      生產者消費者設計模式

      > wait() notify() notifyAll()

      >

      > wait(): 等待。使得當前的線程釋放鎖標記,進入等待隊列。可以使當前的線程進入阻塞狀態。

      >

      > notify(): 喚醒,喚醒等待隊列中的一個線程。

      >

      > notifyAll(): 喚醒,喚醒等待隊列中所有的線程。

      > waitsleep的區別:

      >

      > 1. 兩個方法都可以使一個線程進入阻塞。

      > 2. 區別:wait方法會釋放鎖標記,sleep則不會釋放鎖標記。

      懶漢式單例設計模式中的線程安全問題

      線程池

      > ThreadPoolExecutor類是線程池最核心的類。這個類的構造方法中的幾個參數:

      >

      > int corePoolSize: 核心線程數量。核心池大小。

      >

      > int maxmiunPoolSize: 線程池中最多的線程數量。

      >

      > long keepAliveTime: 核心線程之外的臨時線程,能存活的時間。(從這個線程空閑的時候開始算)

      >

      > TimeUnit unit: 上面的時間單位

      >

      > NANOSECONDS: 納秒

      >

      > MICROSECONDS: 微秒

      >

      > MILLISEONDS: 毫秒

      >

      > SECONDS:

      >

      > MINUTES:

      >

      > HOURS:

      >

      > DAYS:

      >

      > BlockingQueue<Runnable> workQueue: 等待隊列

      >

      > ArrayBlockingQueue

      >

      > LinkedBlockingQueue

      >

      >  SynchronousQueue

      >

      > RejectedExecutionHandler handler:拒絕訪問策略

      預習方向:

      1. 網絡編程

      2. TCP

      3. UDP

      好程序員大數據培訓:http://bigdata.goodprogrammer.org/

      好程序員開班動態

      More+
      • HTML5大前端 <高端班>

        開班時間:2020-02-17(北京)

        開班盛況

        開班時間:2020-03-02(深圳)

        開班盛況
      • 大數據+人工智能 <好程序員嚴選班>

        開班時間:2019-12-23(北京)

        開班盛況
      • 大數據+人工智能 <好程序員班>

        開班時間:2020-02-24(杭州)

        開班盛況

        開班時間:2020-02-17(北京)

        開班盛況
      • JavaEE分布式開發 <高端班>

        開班時間:2020-03-09(北京)

        開班盛況
      • Python全棧+人工智能 <高端班>

        開班時間:2019-07-22(北京)

        開班盛況
      • 云計算開發 <高端班>

        開班時間:2020-02-24(北京)

        開班盛況
      在線咨詢
      免費試聽
      入學教程
      立即報名

      Copyright 2011-2020 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公安網11010802011455號

      色日日 - 色日日网集百万部多多潮流电影,酷酷小说,精彩图片,火辣