잠금은 공유 리소스에 액세스하기 위해 여러 스레드를 제어하는 도구입니다. 일반적 으로이 자물쇠는 공유 자원을 독점적으로 방문합니다. 한 번에 잠금을 얻기위한 스레드는 하나뿐입니다. 그러나 일부 잠금 장치는 readwritelock과 같은 공유 리소스와의 인터뷰를 허용 할 수 있습니다 (한 쌍의 관련 잠금 장치 유지, 하나는 read- 조작을위한 것, 다른 하나는 쓰기 작업).
1. 잠금 장치는 무조건, 둥근 균형, 타이밍, 인터럽트 가능한 잠금 획득 작업을 제공하며 모든 잠금 및 잠금 해제 방법은 명시 적입니다.
공개 인터페이스 잠금 {void lock (); Mode Boolean TryLock (Long Timeout, TimeUnit Unit)은 void unlock ()을 던집니다.
2. ReintrantLock은 동기화와 비교하여 잠금 인터페이스를 실현합니다.
3. 잠금 인터페이스의 규범 적 형태는 최종 블록에서 잠금을 해제하기 위해 릴리스 잠금 ()가 필요합니다. Lock -Guard 코드가 외부 Try Block 외부의 비정상적인 경우에는 결코 해제되지 않습니다.
다음 시뮬레이션 잠금 사용 : 인쇄 (문자열 이름) 메소드를 호출 할 두 개의 스레드 (스레드 A, B 스레드)가 있다고 가정하고 스레드 A는 'Zhangsan'문자열을 인쇄 할 책임이 있으며 스레드 B는 'lisi 인쇄를 담당합니다. ' 끈.
1. Lint (String Name) 메소드를 추가하면 스레드 A가 실행되지 않았고 B 스레드가 실행되기 시작하면 인쇄 된 이름에 다음과 같은 문제가 발생합니다.
2. 인쇄 이름 메소드가 잠금에 추가되면 실행이 완료된 후 A가 완료된 후 인쇄 (문자열 이름) 메소드가 실행되도록 상호 제외 또는 동기화 효과를 달성합니다.
com.ljq.test.thread java.util.concurrent.locks; String [] args) {new Locktest ();} private void init () {new runnable () { @ n averride public void run (). ) {try {stride.sleep (10);} catch (InterpruptedException e) {e.printstacktrace ();} haangsan ");}}}). start (); // b Thread (new Runnable () { @override public void run () {while (true) {thread.sleep (10);} catch (e.prin); START ();} 정적 클래스 아웃 파테르 {lek reintrantlock () {int len = name.length (); ; i <len; i ++) {system.out.print (name.charat (i));} system .out.println ();}.