Java のスレッドセーフなコレクション
Java では、thread-safe
は、複数のスレッドが同時に呼び出されている間、クラスの内部状態とメソッドの値が正しいことを保証するクラスです。
このチュートリアルでは、Java で スレッドセーフ
なコード例を使用して、さまざまなコレクション クラスについて説明します。
Java のスレッド セーフ コレクション
Java で最も人気のある thread-safe
コレクション クラスは、Vector
、Stack
、Hashtable
、Properties
などです。以下の Vector
から始めて、それぞれを学びましょう。
スレッド セーフ コレクション クラス - Vector
Vector
は、必要に応じて拡張できるオブジェクトの配列です。 このクラスは、add()
、remove()
、get()
、elementAt()
、size()
などのメソッドをサポートしています。
コード例:
// Importing necessary packages
import java.util.*;
public class JavaVector {
public static void main(String[] arg) {
// Declaring a vector
Vector MyVector = new Vector();
// Adding data to vector
MyVector.add(12);
MyVector.add(3);
MyVector.add("ABC");
MyVector.add(10);
MyVector.add("DEF");
System.out.println("The vector is: " + MyVector);
// Removing data from the vector.
MyVector.remove(1);
System.out.println("The vector after removing an element is: " + MyVector);
}
}
出力:
The vector is: [12, 3, ABC, 10, DEF]
The vector after removing an element is: [12, ABC, 10, DEF]
スレッド セーフ コレクション クラス - Stack
Stack
クラスは、スタック データ構造を実装します。 LIFO
または Last In First Out
に基づいています。 Stack
クラスの最も一般的な操作は、push()
、pop()
、empty()
、および search()
です。
コード例:
// Importing necessary packages
import java.util.*;
public class JavaStack {
public static void main(String[] args) {
// Declaring a stack
Stack<Integer> MyStk = new Stack<Integer>();
// Adding data to stack
MyStk.push(5);
MyStk.push(7);
MyStk.push(9);
// POP from the stack
Integer num1 = (Integer) MyStk.pop();
System.out.println("The Popped element is: " + num1);
// PUSH the stack
Integer num2 = (Integer) MyStk.peek();
System.out.println("The top element is: " + num2);
}
}
出力:
The popped element is: 9
The top element is: 7
スレッド セーフ コレクション クラス - Hashtable
Java Hashtable
クラスは、keys
を values
にマップするハッシュ テーブルを実装します。 さらに、Map
インターフェイスを実装し、ディレクトリを継承します。
コード例:
// Importing necessary packages
import java.util.*;
public class JavaHashtable {
public static void main(String args[]) {
// Declaring a HashTable
Hashtable<Integer, String> HTable = new Hashtable<Integer, String>();
// Adding data to HashTable
HTable.put(100, "This");
HTable.put(102, "is");
HTable.put(101, "a");
HTable.put(103, "data");
for (Map.Entry MyMap : HTable.entrySet()) {
// Extracting data and keys from the HashTable
System.out.println(MyMap.getKey() + " " + MyMap.getValue());
}
}
}
出力:
103 data
102 is
101 a
100 This
スレッド セーフ コレクション クラス - Synchronize HashMap
Java で スレッドセーフ
コレクションとして使用できる HashMap
の同期バージョンがあります。 この HashMap
は Synchronize HashMap
と最もよく似た働きをします。
コード例:
// Importing necessary packages
import java.util.*;
public class JavaHashMap {
public static void main(String[] args) throws Exception {
try {
// Declaring a HashMap
Map<String, String> HMap = new HashMap<String, String>();
// Adding values to the HashMap
HMap.put("1", "This");
HMap.put("2", "is");
HMap.put("3", "a");
HMap.put("4", "sample");
HMap.put("5", "data");
// Printing the value of HashMap
System.out.println("The Map is : " + HMap);
// Synchronizing the HashMap
Map<String, String> SMap = Collections.synchronizedMap(HMap);
// Printing the Collection after synchronizing the HashMap
System.out.println("The synchronized map is : " + SMap);
} catch (IllegalArgumentException e) {
// Printing exception if necessary
System.out.println("Exception thrown : " + e);
}
}
}
出力:
The Map is : {1=This, 2=is, 3=a, 4=sample, 5=data}
The synchronized map is : {1=This, 2=is, 3=a, 4=sample, 5=data}
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn