❶ java並發類有哪些
1、常用的並發集合類
ConcurrentHashMap:線程安全的HashMap的實現
CopyOnWriteArrayList:線程安全且在讀操作時無鎖的ArrayList
CopyOnWriteArraySet:基於CopyOnWriteArrayList,不添加重復元素
ArrayBlockingQueue:基於數組、先進先出、線程安全,可實現指定時間的阻塞讀寫,並且容量可以限制
LinkedBlockingQueue:基於鏈表實現,讀寫各用一把鎖,在高並發讀寫操作都多的情況下,性能優於ArrayBlockingQueue
2、原子類
AtomicInteger:線程安全的Integer,基於CAS(無阻塞,CPU原語),優於使用同步鎖的Integer
3、線程池
ThreadPoolExecutor:一個高效的支持並發的線程池,可以很容易的講一個實現了Runnable介面的任務放入線程池執行,但要用好這個線程池,必須合理配置corePoolSize、最大線程數、任務緩沖隊列,以及隊列滿了+線程池滿時的回絕策略,一般而言對於這些參數的配置,需考慮兩類需求:高性能和緩沖執行。
Executor:提供了一些方便的創建ThreadPoolExecutor的方法。
FutureTask:可用於非同步獲取執行結果或取消執行任務的場景,基於CAS,避免鎖的使用
4、鎖
ReentrantLock:與synchronized效果一致,但是又更加靈活,支持公平/非公平鎖、支持可中斷的鎖、支持非阻塞的tryLock(可超時)、支持鎖條件等,需要手工釋放鎖,基於AbstractQueueSynchronizer
ReentrantReadWriteLock:與ReentrantLock沒有關系,採用兩把鎖,用於讀多寫少的情形
❷ java中什麼是並發,如何解決
是多線程,多個線程並發執行
處理方法:創建線程對象,創建啟動線程方法(start),等main方法線程結束後,自動調用start執行並處理線程體中內容(start中內容)。
❸ java中並行與並發的區別
並發與並行是兩個既相似而又不相同的概念:並發性,又稱共行性,是指能處理多個同時性活動的能力;並行是指同時發生的兩個並發事件,具有並發的含義,而並發則不一定並行,也亦是說並發事件之間不一定要同一時刻發生。
-------------------------------------------------------------
並發和並行的區別僅僅在發生時刻的不同嗎?
舉個例子理解一下,如:
假設有a、b
兩個事件
並行:
如果a和b都在15:30同時發生,a
的運行時間為
5
分鍾,b
的運行時間為
8
分鍾
在前5分鍾是並行,也包括並發,因為他們都是在同一時刻發生的
並發:
如果a在15:30發生,運行3分鍾後,b事件發生,在以後的5分鍾時間里,a和b
是並發的
-------------------------------------------------------------
並發,是在同一個cpu上同時(不是真正的同時,而是看來是同時,因為cpu要在多個程序間切換)運行多個程序。
並行,是每個cpu運行一個程序。
打個比方,並發,就像一個人(cpu)喂2個孩子(程序),輪換著每人喂一口,表面上兩個孩子都在吃飯。
並行,就是2個人喂2個孩子,兩個孩子也同時在吃飯。
❹ java並發是什麼意思
是多線程,多個線程並發執行 處理方法:創建線程對象,創建啟動線程方法(start),等main方法線程結束後,自動調用start執行並處理線程體中內容(start中內容)。(註:「並發處理」並不是同時處理,是交替處理或是同步線程交替、等待) 線程還可以中斷、和別的線程同步等 線程的幾種狀態:新建態(NEW)、等待態1(sleep中)(TIMED_WAITING)、等待態2(wait中)(WAITING)、阻塞態(BLOCKED)、終止態(TERMINATED)
❺ JAVA程序的並發是什麼意思
並發就是可以使用多個線程或者多個進程,同時處理(就是並發)不同的操作。想要實現並發就要多看這方面的資料了。
❻ java學習java並發編程是啥子意思
一般來說,在java中實現高並發是基於多線程編程的,所謂並發,也就是多個線程同時工作,來處理我們的業務,在機器普遍多核心的今天,並發編程的意義極為重大,因為我們有多個cpu供線程使用,如果我們的應用依然只使用單線程模式來工作的話,是極度浪費機器資源的。而多線程並發編程就很好的解決了這個問題。
❼ java中什麼是並發性,他和static有什麼關系
static方法的優點是可以直接用類名調用,你前面說了並發,而static方法內部要用外部的屬性,那麼外部的屬性也必須是static,問題來了static屬性實際上在整個過程中只有一個對象,比如name第一次賦值「a」,第二次賦值「b」···無數次賦值並且在極短的時間內,而這時候第一次賦值時候是A在調用Astatic方法時候使用的但是這個方法內部調用name的時候,name已經被後面的賦值可能改變了,實際Astatic方法中name得到並不一定是「a」,所以如果你的方法沒有用到外部不一定要被設置為static屬性時可以把方法設成static方法
❽ java中怎麼實現高並發
對於並發操作,都要上鎖的,設置一個欄位記錄抽到獎的人數,每抽到一個就讓update該欄位值+1,更新過程中資料庫會自動給資料庫上鎖,直到commit提交,這里就避免了你說的同時查詢的問題。
❾ java中所謂的並發處理是什麼意思
是多線程,多個線程並發執行
處理方法:創建線程對象,創建啟動線程方法(start),等main方法線程結束後,自動調用start執行並處理線程體中內容(start中內容)。(註:「並發處理」並不是同時處理,是交替處理或是同步線程交替、等待)
線程還可以中斷、和別的線程同步等
線程的幾種狀態:新建態(NEW)、等待態1(sleep中)(TIMED_WAITING)、等待態2(wait中)(WAITING)、阻塞態(BLOCKED)、終止態(TERMINATED)
❿ java高並發
1、在java中,高並發屬於一種編程術語,意思就是有很多用戶在訪問,導致系統數據不正確、糗事數據的現象。並發就是可以使用多個線程或進程,同時處理不同的操作。2、處理高並發的方法
對於一些大型網站,比如門戶網站,在面對大量用戶訪問、高並發請求方面,基本的解決方案集中在這樣幾個環節:使用高性能的伺服器、高性能的資料庫、高效率的編程語言、還有高性能的Web容器。
(1)動靜分離。靜態資源請求與動態請求分離,項目中需要訪問的圖片、聲音、js/css等靜態資源需要有獨立的存放位置,便於將來實現靜態請求分離時直接剝離出來,比如nginx可以直接配置圖片文件直接訪問目錄,而不需要經過tomcat。這樣tomcat就可以專注處理動態請求,操作資料庫數據處理之類的。靜態請求代理伺服器性能比tomcat高很多。
(2)引入緩存。資料庫緩存、頁面緩存,這東西好用不復雜,搞明白什麼地方適用最重要。簡單的例子是頻繁讀取,不修改的地方最適用。也是後續集群做數據共享的一個方式之一,集群環境下,經常會碰到數據共享問題。
(3)如果將來數據量大,單一資料庫成為瓶頸時,資料庫的讀寫分離來了。資料庫集群,讀寫分離,分表分區。