ホームページ  >  記事  >  Java  >  Java のインターフェイスと抽象クラスの同期とロックのメカニズム

Java のインターフェイスと抽象クラスの同期とロックのメカニズム

王林
王林オリジナル
2024-05-01 14:27:01530ブラウズ

Java のインターフェイスと抽象クラスの同期メカニズム: インターフェイスと抽象クラスはインスタンス化できず、独自のロックを持つこともできません。同期メソッドを宣言できます。これは通常のメソッドと似ていますが、synchronized キーワードを使用して変更できます。同期されたメソッドが呼び出されると、スレッドはそのメソッドのロックを取得し、同時に同じメソッドを呼び出す他のスレッドは、ロックが解放されるまでブロックされます。実際のケース: 共有リソース クラス SharedResource には 2 つの同期メソッドがあります。ただし、メソッドの同期のため、スレッドは値の正確性を確保して同時実行を回避するために、ロックへのアクセスを待機する必要があります。問題。

Java 中接口和抽象类的同步与锁机制

#Java におけるインターフェイスと抽象クラスの同期とロックのメカニズム

#はじめに

同期は、複数のスレッドによる共有リソースへの安全なアクセスを保証するメカニズムです。 Java では、ロックを使用して同期を実現できます。ロックは、スレッドがロックを要求したときに、ロックが解放されるまで他のスレッドがリソースにアクセスすることをブロックするオブジェクトです。

インターフェイスと抽象クラスの同期

インターフェイスと抽象クラスはインスタンス化できないため、独自のロックを持つことができません。ただし、同期メソッドを宣言できます。これは通常のメソッドとよく似ていますが、

synchronized キーワードを使用して変更されます。

public interface SynchronizedInterface {

    synchronized void synchronizedMethod();

}

public abstract class SynchronizedAbstractClass {

    synchronized void synchronizedMethod();

}

スレッドが同期メソッドを呼び出すと、そのメソッドのロックを取得します。別のスレッドが同時に同じメソッドを呼び出そうとした場合、ロックが解放されるまでブロックされます。

実際的なケース

共有リソース クラス

SharedResource について考えてみましょう。このクラスには、increment の 2 つの同期メソッドがあります。デクリメント###。 <pre class='brush:java;toolbar:false;'>public class SharedResource { private int value = 0; public synchronized void increment() { value++; } public synchronized void decrement() { value--; } }</pre>現在、

Thread1

Thread2 という 2 つのスレッドがあり、同時に SharedResource にアクセスします。 <pre class='brush:java;toolbar:false;'>public class Thread1 implements Runnable { private SharedResource sharedResource; @Override public void run() { for (int i = 0; i &lt; 100000; i++) { sharedResource.increment(); } } } public class Thread2 implements Runnable { private SharedResource sharedResource; @Override public void run() { for (int i = 0; i &lt; 100000; i++) { sharedResource.decrement(); } } } public class Main { public static void main(String[] args) { SharedResource sharedResource = new SharedResource(); Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(&quot;Final value: &quot; + sharedResource.value); } }</pre>この場合、2 つのスレッドが

increment

メソッドと decrement メソッドを並行して呼び出しますが、これらのメソッドは同期されているため、各スレッドは value# を変更しています。 ## 事前にロックへのアクセスを待つ必要があります。これにより、value の値が常に正しいことが保証され、同時実行の問題は発生しません。

以上がJava のインターフェイスと抽象クラスの同期とロックのメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。