\(^ ^)/잠금 해제의 간단한 예
2869 단어 단례
import java.util.concurrent.locks.ReentrantLock;
public class DeadLockCar extends Thread {
private Object obj;
static ReentrantLock forward = new ReentrantLock();
static ReentrantLock backword = new ReentrantLock();
public DeadLockCar(Object obj){
this.obj = obj;
}
public void run(){
if(obj==forward){
try {
forward.lockInterruptibly();
Thread.sleep(1000);
backword.lockInterruptibly();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
if(forward.isHeldByCurrentThread()){
forward.unlock();
}
if(backword.isHeldByCurrentThread()){
backword.unlock();
}
}
}else{
try {
backword.lockInterruptibly();
Thread.sleep(1000);
forward.lockInterruptibly();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
if(backword.isHeldByCurrentThread()){
backword.unlock();
}
if(forward.isHeldByCurrentThread()){
forward.unlock();
}
}
}
}
public static void main(String[] args) {
Thread c1 = new DeadLockCar(DeadLockCar.forward);
Thread c2 = new DeadLockCar(DeadLockCar.backword);
c1.start();
c2.start();
}
}
두 스레드 클래스:
public class DeadLock{
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2 = new Object();
Thread t1 = new LockA(obj1,obj2);
Thread t2 = new LockB(obj1,obj2);
t1.start();
t2.start();
}
}
class LockA extends Thread {
private Object obj1;
private Object obj2;
public LockA(Object obj1,Object obj2){
this.obj1 = obj1;
this.obj2 = obj2;
}
public void run(){
synchronized(obj1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(obj2){
System.out.println("Lock A");
}
}
}
}
class LockB extends Thread {
private Object obj1;
private Object obj2;
public LockB(Object obj1,Object obj2){
this.obj1 = obj1;
this.obj2 = obj2;
}
public void run(){
synchronized(obj2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(obj1){
System.out.println("Lock B");
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
류의 계승과 다태성1. 대상을 향한 3대 특징: 계승, 다태, 봉인 계승: 정의된 클래스를 복용하여 코드의 군더더기를 줄일 수 있다 문법:public class extends object{}; 다태적: 대상의 호출을 동태적으로 조정하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.