>  기사  >  Java  >  Java 뮤텍스 잠금의 간단한 예

Java 뮤텍스 잠금의 간단한 예

高洛峰
高洛峰원래의
2017-01-23 13:14:311845검색

이 문서의 예에서는 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 중국어 웹사이트!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.