HOWTO · Java
Java のスレッドセーフなコレクション
このチュートリアルでは、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}