實戰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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...