교착 상태는 운영 체제 수준의 버그이며 프로세스 교착 상태의 약어입니다. 1965 년 은행가 알고리즘을 연구 할 때 Dijkstra가 처음 제안했습니다. 컴퓨터 운영 체제 및 전체 동시 프로그래밍 분야에서 가장 어려운 문제 중 하나입니다.
실제로 컴퓨터 세계에는 여러 스레드에 의해 해결되어야하는 많은 것들이 있습니다. 이러한 방식으로 리소스를 사용하여 컴퓨팅 효율을 극대화 할 수 있기 때문입니다. 그러나 실제로 컴퓨터 시스템에는 프린터와 같은 한 번에 한 번에 한 번에만 리소스를 사용할 수 있으며 동시에 하나의 프로세스만이이를 제어 할 수있는 많은 상황이 있습니다. 다 채널 프로그래밍 환경에서 여러 프로세스가 종종 그러한 리소스를 공유하며 프로세스에는 둘 이상의 리소스가 필요할 수 있습니다. 따라서 여러 프로세스가 제한된 자원을 놓고 경쟁 할 것이며 발전 순서는 부적절하게 이루어져 무기한주기 대기 상황을 형성합니다. 우리는이 주 교착 상태라고 부릅니다. 간단히 말해, 교착 상태는 여러 프로세스가 자신이 차지하는 자원을 통해 순환하고 무기한 교착 상태에있는 상황을 말합니다. 분명히 외부 힘이 없다면 교착 상태와 관련된 모든 프로세스는 항상 차단됩니다.
파일 이름 : DeadthreadByextend.java
메모:
1. 스레드를 시작할 때 시작 방법을 사용할 수 있습니다. 런 메소드도 호출 할 수 있지만 일반 호출과 동일하며 현재 스레드에서 실행됩니다.
2. 동기화 된 변수를 직접 수정할 수 없습니다.
3. 동기화 된 블록은 블록의 변수에 대한 단일 스레드 액세스를 강제하지 않습니다. 이것은 단순히 블록 내에서 문을 실행할 때 동기화 된 (ARGS) 매개 변수가 잠겨 있으며 실행이 완료 될 때까지 해제되지 않음을 의미합니다.
package com.ycf.study.thread; 클래스 소스 {int a; public void seta (int x) {synchronized (this) {this.a = x; try {strood.sleep (2000);} catch (interpruptedException e) {e.printstacktrace ();}}}} public static void (strest) {sources s1 = new sources (); 소스 s2 = 새로운 소스 (); class mythread1은 java.lang.thread {@override public void run () {system.out.println ( "Thread 1 Start"); synchronized (s1) {system.out.println ( "스레드 1에 적용됩니다. s1");s1.setA(20);System.out.println("Thread 1 exits and releases lock++++++++++++++++");}}class MyThread2 extends java.lang.Thread {@Override public void run() {System.out.println("Thread 2 starts");synchronized (s2) {System.out.println ( "스레드 2"); S2.Seta (20); System.out.println ( "스레드 2 변경 S2 완료"); System.out.println ( "스레드 2는 S1을 수정하는 데 적용됨"); S1.Seta (10); System.out.println ( "Thread 2 Changes S1 (STLEG 2 Changes)";} 시스템. 잠금 ++++++++++++++ ");}}}}}}}} mythread1 mt1 = new Mythread1 (); Mythread2 mt2 = new Mythread2 (); mt1.start (); mt2.start ();}}.요약
위의 내용은이 기사의 Java 스레드 교착 코드 예제에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다.