Java 멀티스레드 프로그래밍의 Lock 사용 사례
1. Lock은 무조건적이고 윤문할 수 있으며 정해진 시간에 끊길 수 있는 자물쇠 획득 조작을 제공하며 모든 자물쇠를 채우고 잠금을 해제하는 방법은 현저하다.
public interface Lock{
void lock(); //
// ,
void lockInterruptibly() throws InterruptedException;
boolean tryLock(); //
boolean tryLock(long timeout,TimeUnit unit) throws InterruptedException;
void unlock(); //
Condition newCondition();
}
2. ReentrantLock은 lock 인터페이스를 실현했고synchronized에 비해 ReentrantLock은 사용할 수 없는 자물쇠를 처리하는 데 더 많은 유연성을 제공했다.3. lock 인터페이스를 사용하는 규범적인 형식은finally 블록에서 자물쇠 lock을 방출해야 한다.unlock().만약 자물쇠 수호 코드가try 블록 밖에서 이상을 던졌다면, 그것은 영원히 방출되지 않을 것이다.
다음 아날로그 Lock 사용법: 두 개의 라인(A라인, B라인)이 print(Stringname) 방법을 호출한다고 가정하면 A라인은'zhangsan'문열을 출력하고, B라인은'lisi'문열을 출력합니다.
1. print(String name) 방법에 자물쇠를 채우지 않으면 A 라인이 실행되지 않고 B 라인이 실행되기 시작하면 인쇄된name에 다음과 같은 문제가 발생합니다.
2. print(String name) 방법에 자물쇠를 넣으면 A 실행이 끝난 후에 B 라인이 print(String name) 방법을 실행하여 상호 배척 또는 동기화 효과를 얻는다.
package com.ljq.test.thread;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Lock synchronized
*
* @author Administrator
*
*/
public class LockTest {
public static void main(String[] args) {
new LockTest().init();
}
private void init() {
final Outputer outputer = new Outputer();
//A
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.output("zhangsan");
}
}
}).start();
//B
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.output("lisi");
}
}
}).start();
}
static class Outputer {
Lock lock = new ReentrantLock();
/**
*
*
* @param name
*/
public void output(String name) {
int len = name.length();
lock.lock();
try {
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
} finally {
lock.unlock();
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.