クラスに Java Synchronized Block を使用する
Java では、同期とは、共有可能なリソースにアクセスする複数のスレッドを管理することです。 Java での同期は、スレッドが相互に確実に通信できるようにするために使用され、単一のスレッドが共有リソースにアクセスするための最良のオプションとも考えられています。
synchronized
キーワードは、同期ブロックをマークするために使用されます。 一部のオブジェクトでは、Java 同期ブロックが適用されます。
クラスに Java Synchronized Block を使用する
同じオブジェクトの同期ブロックに複数のスレッドがある場合、1つのスレッドのみがブロックに入り、一度に 1つのスレッドしか実行できません。 他のすべてのスレッドはブロックされたままになります。
クラスの Java 同期ブロックについて、例を挙げて説明しましょう。
コード例:
class Block {
// synchronized block starts from here
void printBlock(int b) {
synchronized (this) {
System.out.println("The block output is: ");
for (int j = 1; j <= 4; j++) {
System.out.println(b * j);
// handles exception
try {
Thread.sleep(500);
} catch (Exception e) {
System.out.println(e);
}
}
}
} // ending
}
class S1 extends Thread {
Block s;
S1(Block s) {
this.s = s;
}
public void run() {
s.printBlock(10);
}
}
class S2 extends Thread {
Block s;
S2(Block s) {
this.s = s;
}
public void run() {
s.printBlock(200);
}
}
class SyncBlock {
// main method
public static void main(String args[]) {
// object creation
Block obj = new Block();
S1 s1 = new S1(obj);
S2 s2 = new S2(obj);
// run the threads s1 and s2
s1.run();
s2.run();
}
}
出力:
The block output is:
10
20
30
40
The block output is:
200
400
600
800
上記の例では、S1
と S2
の 2つのスレッドがあります。 両方のスレッドには、同期
メソッドを呼び出すのに役立つ printBlock
メソッドがあります。
S1
スレッドの入力値は 10 で、S2
の場合は 200 です。次に、ブロック出力は S1
と S2
スレッド出力の間に出力されます。
コード例:
import java.util.*;
class synchronize {
String title = "";
public int c = 0;
public void result(String s, List<String> li) {
// only one thread is allowed to change the title simultaneously.
synchronized (this) {
title = s;
c++;
}
li.add(s);
}
}
class SyncBlock {
// main method
public static void main(String[] args) {
// for synchronize class, we have created an object
synchronize ob = new synchronize();
// we have created a list here
List<String> li = new ArrayList<String>();
// for calling the method, a string is passed to it
ob.result("Sprint Planning", li);
System.out.println(ob.title);
}
}
出力:
Sprint Planning
上記の例では、クラスの同期が作成されています。 このクラスでは、synchronized
メソッドを使用しました。
メソッドを呼び出すための入力値として文字列が渡されます。 つまり、スプリント計画
です。
上記のプログラムを実行すると、出力として Sprint Planning
が得られます。
まとめ
Java で同期ブロックについて説明する方法はたくさんありますが、この記事では、同期、同期ブロック、およびそのしくみについて説明しました。
オブジェクトに対して一度に複数の スレッド
がある場合、同期ブロックを使用すると、一度に 1つのスレッドしか実行できません。 ブロック内のスレッドが正常に実行されるまで、他のスレッドはブロックに入ることができません。
したがって、Java の同期ブロック クラスにより、たとえば、一度にブロック内に存在する スレッド
は 1つだけになります。
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn