1. 程式人生 > >Map執行緒安全幾種實現方法

Map執行緒安全幾種實現方法

如果需要使 Map 執行緒安全,大致有這麼四種方法: 
1、使用 synchronized 關鍵字,程式碼如下
synchronized(anObject) { 
  value = map.get(key);
}


2、使用 JDK1.5提供的鎖(java.util.concurrent.locks.Lock)。程式碼如下
lock.lock(); 
value = map.get(key); 
lock.unlock();


3、使用 JDK1.5 提供的讀寫鎖(java.util.concurrent.locks.ReadWriteLock)。程式碼如下
rwlock.readLock().lock(); 
value = map.get(key); 
rwlock.readLock().unlock(); 
這樣兩個讀操作可以同時進行,理論上效率會比方法 2 高。


4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 類。該類將 Map 的儲存空間分為若干塊,每塊擁有自己的鎖,大大減少了多個執行緒爭奪同一個鎖的情況。程式碼如下
value = map.get(key); //同步機制內建在 get 方法中


比較: 
1、不同步確實最快,與預期一致。 
2、四種同步方式中,ConcurrentHashMap 是最快的,接近不同步的情況。
3、synchronized 關鍵字非常慢,比使用鎖慢了兩個數量級。如果需自己實現同步,則使用 JDK1.5 提供的鎖機制,避免使用 synchronized 關鍵字。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 public class MapTest { public static final int THREAD_COUNT = 1; public static final int MAP_SIZE = 1000; public static final 

相關推薦

Map執行安全實現方法

如果需要使 Map 執行緒安全,大致有這麼四種方法:  1、使用 synchronized 關鍵字,程式碼如下 synchronized(anObject) {    value = map.get(key); } 2、使用 JDK1.5提供的鎖(j

java多執行實現方法

          方法一:繼承Thread類,覆蓋方法run(), public class MyThread extends Thread { int count= 1, number; public MyThread(int num) { number = num;

執行實現方法?同步有實現方法?

為何要使用同步? java允許多執行緒併發控制,當多個執行緒同時操作一個可共享的資源變數時(如資料的增刪改查),  將會導致資料不準確,相互之間產生衝突,因此加入同步鎖以避免在該執行緒沒有完成操作之前,被其他執行緒的呼叫,  從而保證了該變數的唯一性和準確性。 同步的

設計模式之單例模式【內附物件例項化方式、實現執行安全方式】

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

執行的三實現方法

執行緒的三種實現方法:(1)繼承 Thread 類,重寫run()方法; (2)實現 Runnable 介面,重寫run() 方法; (3)實現 Callable 介面,重寫call()方法; 方式一:  繼承Thread類 public class MyThreadDemo {

執行的四實現方法

Java多執行緒實現方式主要有四種:繼承Thread類、實現Runnable介面、實現Callable介面通過FutureTask包裝器來建立Thread執行緒、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。 其中前兩種方式執行緒執行完後都沒

java執行常用方法

join() Thread物件方法,用於使當前執行緒和後面的程式碼同步,使當前執行緒內操作執行完成後再執行後面的指令 wait() Thread物件方法,使當前執行緒進入等待狀態,等待狀態的執行緒不會去競爭資源 sleep() Thread類方法,使當前執行緒休眠指定時間

執行有兩實現方法的具體區別

Java中有兩種實現多執行緒的方式。一是直接繼承Thread類,二是實現Runnable介面。那麼這兩種實現多執行緒的方式在應用上有什麼區別呢? 第一種方式:使用Runnable介面建立執行緒第二種方式:直接繼承Thread類建立物件使用Runnable介面建立執行緒1.可

執行的兩實現方法

package thread; //繼承方式: /*class Demo2 extends Thread {private String name;Demo2(String name){super(name);this.name=name;}public void run(

Linux kernel多執行實現

驅動開發中常常會啟動幾個核心執行緒,在整個驅動生命週期期間執行某些操作,比如USB驅動的控制執行緒,一直等待SCSI命令,沒有命令的話睡眠,有命令的話就喚醒執行緒,解析執行相關的命令。還有USB驅動中的掃描執行緒,如果有新的裝置連線到USB匯流排,則會啟動掃描過程,平時時

Android 執行 thread 兩實現方法

這篇文章中有三點需要提前說明一下, 一: 在android中有兩種實現執行緒thread的方法: 一種是,擴充套件java.lang.Thread類 另一種是,實現Runnable介面 二: Thread類代表執行緒類,它的兩個最主要的方法是: run()——包含執

JAVA之多執行概念及其實現方法優劣分析

1. 多執行緒 程式:指令集,靜態的概念 程序:作業系統調動程式,是程式的一次動態執行過程,動態的概念 執行緒:在程序內的多條執行路徑 Ps:單核的話程序都是虛擬模擬出來的,多核處理器才可以執行真正的多執行緒 單核通過CPU排程時間片實現虛擬模擬的多執行緒,比如執行main函式和GC在底層就是多執行

執行同步和互斥有哪實現方法

執行緒間的同步方法大體可分為兩類:使用者模式和核心模式。顧名思義,核心模式就是指利用系統核心物件的單一性來進行同步,使用時需要切換核心態與使用者態,而使用者模式就是不需要切換到核心態,只在使用者態完成操作。使用者模式下的方法有:原子操作(例如一個單一的全域性變數),臨界區。核

執行同步的實現方法

一、引言 前幾天面試,被大師虐殘了,好多基礎知識必須得重新拿起來啊。閒話不多說,進入正題。 二、為什麼要執行緒同步 因為當我們有多個執行緒要同時訪問一個變數或物件時,如果這些執行緒中既有讀又有寫操作時,就會導致變數值或物件的狀態出現混亂,從而導致程式

Android的執行詳解(實現方法及區別)

一、Android執行緒的定義和特點     1.什麼是執行緒: 執行緒是一種輕量級程序,大多數情況下用於執行非同步操作。在一個Android 程式開始執行的時候,會單獨啟動一個程序,同時會產生一個UIThread執行緒(main執行緒)。一個Android 程式預設情況

執行(一):建立執行方法

概括來說就是兩種:1、繼承Thread類,重寫run方法,然後start。不推薦這種,因為java的單繼承特性。 2、Thread類的建構函式中可以接受Runnable任務,所以只要是Runnable例項就可以作為引數給Thread 一般有兩種建立Runnable例項的方法(1)實現Runn

啟動執行的五方式方法(通過繼承Thread類或實現Runnable介面)

package day01; /**  * 啟動執行緒的五種方式方法:  * 本質:繼承Thread類或實現runnable介面  * @author Administrator  *  */ public class ThreadDemo {  /**   * @para

執行,兩實現方式(繼承Thread,實現Runnable介面),設定獲取名字,同步程式碼塊、方法,死鎖

1.多執行緒的引入(瞭解) 1.什麼是執行緒 執行緒是程式執行的一條路徑, 一個程序中可以包含多條執行緒 多執行緒併發執行可以提高程式的效率, 可以同時完成多項工作 2.多執行緒的應用場景 紅蜘蛛同時共享螢幕給多個電腦 迅雷開啟多條執行緒一起下載 Q

Java 多執行 學習筆記(二)停止執行方法

1.異常法: package test; import exthread.MyThread; import exthread.MyThread; public class Run { pu

Java停止一個執行方法

Java中停止一個執行緒有三種方法,分別是stop,interrupt和設定標誌位,我們依次來看一下這三種方法。 首先不推薦使用stop方法,原因有兩點: 1、原則上只要一呼叫thread.stop()方法,執行緒就會立即停止,並丟擲ThreadDeath error,查看