>  기사  >  Java  >  Java에서 교착상태를 일으키는 상황은 무엇입니까?

Java에서 교착상태를 일으키는 상황은 무엇입니까?

WBOY
WBOY앞으로
2023-05-19 12:46:061172검색

4 스레드 T1 및 T2, T1은 10MB의 메모리를 얻었고, T2는 15MB의 메모리를 얻었으며, T1과 T2는 모두 작동하려면 30MB의 메모리를 얻어야 하지만 남은 사용 가능한 메모리는 10MB이므로 두 스레드가 서로를 기다리고 있습니다. to release memory 3. 질의응답 데이터 교환: 서버가 특정 포트를 열고 클라이언트 액세스를 기다립니다. 클라이언트가 요청을 보낸 후 서버는 어떤 이유로 클라이언트 요청을 놓쳐 클라이언트가 기다리게 됩니다. 서버가 클라이언트를 기다리는 동안 요청 보내기

4. 무한 루프로 인한 교착 상태: jstack과 같은 도구를 사용하면 교착 상태를 볼 수 없지만 프로그램이 작동하지 않습니다. CPU 점유율이 높습니다. 이러한 종류의 교착 상태를 시스템 정지 애니메이션이라고도 하며, 이제 문제를 해결하고 다시 시작하기가 어렵습니다.

Instance

public class Main {
    private final Object MUTEX_READ = new Object();
    private final Object MUTEX_WRITE = new Object();
 
    public void read(){
        synchronized (MUTEX_READ){
            synchronized (MUTEX_WRITE){
            }
        }
    }
 
    public void write(){
        synchronized (MUTEX_WRITE){
            synchronized (MUTEX_READ){
            }
        }
    }
 
    public static void main(String[] args) throws InterruptedException {
        Main m = new Main();
        new Thread(()->{
            while (true){
                m.read();
            }
        }).start();
        new Thread(()->{
            while (true){
                m.write();
            }
        }).start();
    }
}

위 내용은 Java에서 교착상태를 일으키는 상황은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제