day20Java-Thread-Lock 잠금 및 고정 잠금
16265 단어 JavaSE
Java- (고급)
문서 목록
Lock 자물쇠
java.util.concurrent.locks
비록 우리는 동기화 코드 블록과 동기화 방법의 자물쇠 대상 문제를 이해할 수 있지만 어디에 자물쇠를 달았는지, 어디서 자물쇠를 풀었는지 직접 보지 못했다. 자물쇠를 어떻게 달았는지, 풀었는지 더욱 명확하게 표현하기 위해 JDK5 이후에 새로운 자물쇠 대상 Lock을 제공했다.
Lock:
void lock(): 。
void unlock(): 。
ReentrantLock Lock 。
코드 데모
public class SellTicketDemo {
public static void main(String[] args) {
//
SellTicket st = new SellTicket();
// Thread
Thread t1 = new Thread(st," 1");
Thread t2 = new Thread(st," 2");
Thread t3 = new Thread(st," 3");
//
t1.start();
t2.start();
t3.start();
}
}
사용자 정의 클래스 Runnable 인터페이스 구현
public class SellTicket implements Runnable {
// 100
private int ticket = 100;
// Lock
Lock lock = new ReentrantLock();
//Lock
@Override
public void run() {
while (true) {
try {
//
lock.lock();
if (ticket > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + (ticket--) + " ");
}
} finally {
//
lock.unlock();
}
}
}
//
/*@Override
public void run() {
while (true){
synchronized (this) {
if (ticket > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + (ticket--) + " ");
}
}
}
}*/
}
결과:
1 10
1 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
고정 자물쇠
:
A:
B:
:
, 。
:
, 。
:
:
:
:
: 1 ,
: 1 ,
코드 데모
public class DieLockDemo {
public static void main(String[] args) {
//
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);
//
dl1.start();
dl2.start();
}
}
고정 잠금 코드 데모
public class DieLock extends Thread{
private boolean flag;
public DieLock(boolean flag) {
this.flag = flag;
}
//
@Override
public void run() {
if (flag) {
synchronized (MyLock.objA) { // tl1, 。
System.out.println("if objA");
synchronized (MyLock.objB) {// tl2 , tl2 。
System.out.println("if objB");
}
} // , 。
} else {
synchronized (MyLock.objB) {// tl2, 。
System.out.println("else objB");
synchronized (MyLock.objA) {// tl1 , tl1 。
System.out.println("else objA");
}
}
}
}
}
두 개의 자물쇠 정의
public class MyLock {
public static final Object objA = new Object();
public static final Object objB= new Object();
}
결과: 사라진 자물쇠가 나타났다(나타날 수 있음)
else objB
if objA
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WeakHashMap,IdentityHashMap,EnumMap다른 맵 구현 클래스와 달리 WeakHashMap 클래스의 키 대상은 간접적으로 약한 인용의 지시 대상으로 저장되며, 키가 정상적으로 사용되지 않을 때 자동으로 항목을 제거합니다.더 정확히 말하면, 주어진 키에 대한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.