實戰JAVA 高併發設計

来源:http://www.cnblogs.com/rese-t/archive/2017/11/21/7875278.html
-Advertisement-
Play Games

一、同步(Synchronous)和非同步(Asynchronous) 同步和非同步通常用來形容一次方法調用,同步方法,調用者必須等到方法調用返回後,才能繼續後續的行為,非同步方法調用會立即返回,調用者就可以繼續後續的操作 二、併發和並行 併發和並行都可以表示兩個或多個任務一起執行,但偏重點點不同,併發偏 ...


一、同步(Synchronous)和非同步(Asynchronous)

同步和非同步通常用來形容一次方法調用,同步方法,調用者必須等到方法調用返回後,才能繼續後續的行為,非同步方法調用會立即返回,調用者就可以繼續後續的操作

二、併發和並行

併發和並行都可以表示兩個或多個任務一起執行,但偏重點點不同,併發偏重於多個任務交替執行,而多個任務之間有可能還是串列的。而並行是真正意義上的“同時執行”。

三、阻塞(Blocking)和非阻塞(Non-Blocking)

一個線程占用了臨界資源,那麼其他所有需要這個資源的線程就必須在這個臨界區中進行等待,等待會導致線程掛起,這種情況就是阻塞,非阻塞的意思與之相反。

四、線程的狀態

線程的狀態

1、線程的啟動是調用start()方法,而不是run()方法。

2、線程的終止、不用stop()是因為stop()方法太過暴力,強行把執行到一半的線程終止,可能會引起數據不一致的問題,一般我們定義一個線程終止的方法,告知線程何時停止即可。

3、線程中斷:線程中斷並不會使線程立即退出,而是給線程發一個通知,告知目標線程,有人希望你退出,至於目標線程接到通知後如何處理,則完全由目標線程自行決定。與線程中斷的有三個方法

Thread.interrupt(): // 中斷線程

Thread.isInterrupted()://判斷是否中斷

Thread.Interrupted():// 判斷是否中斷,並清除當前中斷狀態

註:Thread.sleep()方法會拋出一個InterruptedException中斷異常,這不是運行時異常,也就是說程式必須捕獲並處理它。當線程在休眠時,如果被中斷,這個異常會產生。

4、等待(wait)和通知(notify) 註:這兩個方法是在Object類中的,意味著任何對象都可以調用這兩個方法。

obj.wait()方法,線程會停止繼續執行,轉為等待狀態,直到其他線程調用obj.notify()方法為止。調用object.wait()方法,就會進入object對象的等待隊列,當調用object.notify()時,會從這個等待隊列中,隨機選擇一個線程,並將其喚醒,這個選擇是不公平的,完全是隨機的。notifyAll()會喚醒等待隊列里的所有線程,而不是隨機選擇一個線程。

5、掛起(suspend)和繼續執行(resume)線程

suspend與resume是一組相反的操作,調用suspend方法後的線程,必須等到resume方法調用後,才能繼續執行。

註:此方法已經被廢棄,並不推薦使用,因為suspend()在導致線程暫停的同時,並不會去釋放任何資源。此 時,若其他任何線程想要訪問被它暫用的鎖時,都會被牽連,導致無法正常繼續運行。同時,若resume()方法在suspend()前就執行了,那麼被suspend()方法掛起的線程,很難有機會被繼續執行,更為嚴重的是,它所占用的鎖不會被釋放,可能導致整個系統工作不正常。同時,對於被掛起的線程,從線程狀態上看,還是Runnable,會嚴重影響我們的判斷.

java交流群669823128


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • /*使用一位數組解決 1 1 2 3 5 8 13 數列問題 斐波納契數列 Fibonacci*/ package cn.GM; public class array { public static void main(String[] args) { // TODO Auto-generated ... ...
  • 上班有點時間想把碎片時間用來學python 辦公電腦一臺: win7 64位辦公系統 通過專業軟體撥號連接內網 空閑時間關閉內網,用另一塊網卡上外網 方案: 安裝虛擬機運行centos6.9 在虛擬機上安裝python的web開發框架Django、mysql資料庫、nginx 和宿主機win7文件夾 ...
  • 配置文件代碼: 包括bean context aop三個約束 以及切麵的配置——表達式execution含義、advice通知/增強設置 連接點joinpoint的類,即需要被增強的類: 進行切麵操作的類: 測試的類: 演示效果圖: 瀏覽器無反應 只有Book的方法,沒有前置的before,想來應該 ...
  • 我今天調了一天的bug,已知不懂為什麼其它都可以,但是一直這裡輸出不行,換了多種思路,一直調試; 。。。 終於,在一次次重新看代碼的時候註意到,有一處地方,我認為是不會錯的代碼的地方,實際上是有錯誤的: 在connect函數那裡,信號的發出方,由於我在寫多個Action的時候,是直接copy了相同代 ...
  • 1. 安裝gcc(centos 7之後一般已自帶,可以在第6步失敗後再安裝) yum install gcc gcc-c++ 2. 安裝pcre yum install -y pcre pcre-devel 3. 安裝zlib yum install -y zlib zlib-devel 4. 安裝 ...
  • 題目描述 陶陶是個貪玩的孩子,他在地上丟了A個瓶蓋,為了簡化問題,我們可以當作這A個瓶蓋丟在一條直線上,現在他想從這些瓶蓋里找出B個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢? 輸入輸出格式 輸入格式: 第一行,兩個整數,A,B。(B<=A<=100000) 第二行,A個整數,分別為這 ...
  • 當遇到以下場景: 其他人寫的單元測試影響統計結果 一些需要調用外部介面的測試暫不運行 需要在非本機環境上運行一些不回滾的單元測試 則有必要選擇以下方法跳過部分測試。 在測試用例前加上註解 @Ignore,例如: @Ignore @Test public void testGetAreaChirldr... ...
  • 學習python前需要有許多準備知識,整理大致如下: 以上儘快完成,並搭建項目。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...