Java ミューテックス ロックの簡単な例

高洛峰
リリース: 2017-01-23 13:14:31
オリジナル
1902 人が閲覧しました

この記事の例では、Java ミューテックス ロックについて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

ミューテックス ロックは、複数のスレッドが同時にファイルを書き込むなど、排他的なリソースにアクセスするためによく使用されます。相互排他的アクセス方法は十分に効率的ではありませんが、非常に意味があります。いくつかのアプリケーション シナリオ

//没有互斥锁的情况(可以自己跑跑看运行结果):
public class LockDemo {
  
// private static Object lock = new Object();
// static确保只有一把锁
  private int i = 0;
  public void increaseI() {
//   synchronized (lock) {
      for(int k=0;k<10;k++) { // 对i执行10次增1操作
        i++;
      }
      System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i);
//   }
  }
  public static void main(String[] args) {
    LockDemo ld = new LockDemo();
    int threadNum = 1000;
    // 选择1000个线程让结果更加容易观测到
    MyThread[] threads = new MyThread[threadNum];
    for(int i=0;i<threads.length;i++) {
      threads[i] = new MyThread(ld);
      // 所有线程共用一个LockDemo对象
      threads[i].start();
    }
  }
}
class MyThread extends Thread {
  LockDemo ld;
    
  public MyThread(LockDemo ld) {
    this.ld = ld;
  }
  public void run() {
    ld.increaseI();
  }
}
//加上互斥锁以后:
public class LockDemo {
  private static Object lock = new Object();
  // static确保只有一把锁
  private int i = 0;
  public void increaseI() {
    synchronized (lock) {
      for(int k=0;k<10;k++) {
      // 对i执行10次增1操作
        i++;
      }
      System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i);
    }
  }
  public static void main(String[] args) {
    LockDemo ld = new LockDemo();
    int threadNum = 1000;
    // 选择1000个线程让结果更加容易观测到
    MyThread[] threads = new MyThread[threadNum];
    for(int i=0;i<threads.length;i++) {
      threads[i] = new MyThread(ld);
      // 所有线程共用一个LockDemo对象
      threads[i].start();
    }
  }
}
class MyThread extends Thread {
  LockDemo ld;
  public MyThread(LockDemo ld) {
    this.ld = ld;
  }
  public void run() {
    ld.increaseI();
  }
}
ログイン後にコピー

この記事が皆さんの Java プログラミング設計に役立つことを願っています

Java ミューテックス ロックの簡単な例に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート