자바 다 중 스 레 드 - lock 인터페이스 (다 중 스 레 드 공유 자원 잠 금)
6419 단어 병발 하 다
Lock 의 장점:
예 를 하나 보다.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Lockers , , ,
* , ,
* 。
*/
public class Lockers {
public static void main(String[] args) throws Exception {
Lockers.testLockTest();
}
public static void testLockTest() throws Exception {
final LockTest lockTest = new LockTest();
// 1, lockTest addValue ( )
Runnable task1 = new Runnable() {
public void run() {
lockTest.addValue(55.55);
}
};
// 2, lockTest getValue ( )
Runnable task2 = new Runnable() {
public void run() {
System.out.println("value: " + lockTest.getValue());
}
};
//
ExecutorService cachedService = Executors.newCachedThreadPool();
Future future = null;
// 1 , addValue , ,
for (int i = 0; i < 3; i++) {
future = cachedService.submit(task1);
}
// 1
future.get();
// 2,
future = cachedService.submit(task2);
// 2 ,
future.get();
cachedService.shutdownNow();
}
/**
* Lock 。 Lock, Synchronized 。
*/
public static class LockTest {
Lock lock = new ReentrantLock(); //
double value = 0d; //
int addtimes = 0;
/**
* value , 2 , ,
* , Synchronized 。
*/
public void addValue(double v) {
lock.lock();//
System.out.println(" ( ), ...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
this.value += v;
this.addtimes++;
System.out.println(" ( )!");
lock.unlock();//
}
public double getValue() {
return this.value;
}
}
}
실행 결과:
( ), ...
( )!
( ), ...
( )!
( ), ...
( )!
value: 166.64999999999998
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java. util. concurrent 패키지 의 해체@Date 2019-7-8 11:25*/public class BlockingQueueExample {public static void main(String[] args) {BlockingQueue blockingQ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.