>  기사  >  Java  >  sleep()과 wait()의 차이점은 무엇입니까?

sleep()과 wait()의 차이점은 무엇입니까?

云罗郡主
云罗郡主앞으로
2018-10-15 13:55:203338검색

이 글의 내용은 sleep()과 wait()의 차이점이 무엇인가요? , 특정 참조 가치가 있으므로 도움이 필요한 친구가 참조할 수 있으므로 도움이 되기를 바랍니다.

sleep()과 wait()의 차이점은 무엇인가요?

sleep은 스레드 클래스(Thread)의 메서드로, 이 스레드가 지정된 시간 동안 실행을 일시 중단하고 다른 스레드에 실행 기회를 주지만 모니터링 상태는 그대로 유지되며 때가 되면 자동으로 재개됩니다. sleep을 호출해도 객체 잠금이 해제되지 않습니다. wait는 Object 클래스의 메소드입니다. 이 객체에 대해 wait 메소드를 호출하면 이 스레드가 객체 잠금을 포기하고 이 객체에 대해 알림 메소드 또는 informAll이 실행된 후에만 대기 잠금 풀에 들어갑니다. 스레드는 객체 잠금 풀에 들어가고 이를 획득할 준비를 합니다. 객체 잠금은 실행 상태로 들어갑니다.

스레드가 개체의 동기화 메서드에 들어갈 때 다른 스레드가 이 개체의 다른 메서드에 들어갈 수 있나요?

다른 스레드는 개체의 동기화되지 않은 다른 메서드에만 액세스할 수 있지만 동기화된 메서드는 들어갈 수 없습니다.

스레드 동기화 방법은 무엇입니까?

wait(): 스레드를 대기 상태로 설정하고 해당 개체의 잠금을 해제합니다.

sleep(): 실행 중인 스레드를 절전 상태로 설정합니다. InterruptedException을 포착하기 위해 이 메서드를 호출합니다. 예외;

notify(): 대기 상태에 있는 스레드를 깨웁니다. 이 메서드를 호출하면 대기 상태에 있는 스레드를 정확하게 깨울 수 없습니다. 대신 JVM은 깨어날 스레드를 결정합니다.

notifyAll(): 대기 상태에 있는 모든 스레드를 깨우십시오. 깨어난 모든 스레드에 객체 잠금을 부여하는 것이 아니라 경쟁하게 하십시오.

멀티스레딩에는 여러 가지 구현 방법이 있고 동기화에는 여러 가지 구현 방법이 있습니다.

멀티 스레딩에는 Thread 클래스 상속과 Runnable 인터페이스 구현이라는 두 가지 구현 방법이 있습니다.

동기화에는 동기화, 대기 및 알림이라는 두 가지 구현 방법이 있습니다.

동기식과 비동기식의 유사점과 차이점은 무엇이며 어떤 상황에서 사용됩니까?

스레드 간에 데이터가 공유되는 경우. 예를 들어, 기록 중인 데이터를 나중에 다른 스레드에서 읽을 수 있거나 읽은 데이터를 다른 데이터에서 쓴 경우 이러한 데이터는 공유 데이터이므로 동기적으로 액세스해야 합니다. 비동기 프로그래밍은 애플리케이션이 실행하는 데 오랜 시간이 걸리고 프로그램이 메서드 반환을 기다리지 않기를 원하는 메서드를 호출할 때 사용해야 합니다. 대부분의 경우 비동기 방식이 더 효율적입니다.

스레드를 시작하려면 run() 또는 start()를 사용하세요.

스레드를 시작한다는 것은 start() 메소드를 호출하여 스레드가 나타내는 가상 머신을 실행 가능한 상태로 만드는 것입니다. 이는 JVM에 의해 예약되고 실행될 수 있음을 의미합니다. 이는 스레드가 즉시 실행된다는 의미는 아닙니다. . run() 메소드는 필수 종료 플래그를 생성하여 스레드를 중지할 수 있습니다.

스레드의 기본 개념, 스레드의 기본 상태, 상태 간의 관계.

스레드는 실행 중에 프로그램 코드를 실행할 수 있는 실행 단위를 말합니다. 각 프로그램에는 프로그램 자체인 하나 이상의 스레드가 있습니다.

Java의 스레드에는 실행 중, 준비, 일시 중지, 종료의 네 가지 상태가 있습니다.

동기화와 java.util.concurrent.locks.Lock의 유사점과 차이점을 간략하게 설명하세요.

주요 유사점: Lock은 동기화로 구현된 모든 기능을 완료할 수 있습니다.

주요 차이점: Lock은 동기화보다 더 정확한 스레드 의미론과 더 나은 성능을 갖습니다. 동기화는 자동으로 잠금을 해제하지만 잠금은 프로그래머가 수동으로 해제해야 하며 finally 절에서 해제해야 합니다.

Java에서 스레드를 구현할 수 있는 방법은 몇 가지입니까? 동기화 방법을 수정하는 데 어떤 키워드가 사용됩니까? stop() 및 suspens()가 더 이상 사용되지 않는 이유는 무엇입니까?

두 가지 구현 방법이 있습니다. 즉, Thread를 상속하고 Runnable 인터페이스를 구현하는 것입니다.

동기화 방법을 수정합니다.

stop()은 안전하지 않기 때문에 사용을 반대합니다. 스레드가 획득한 모든 잠금을 해제하고 개체가 일관되지 않은 상태인 경우 다른 스레드가 이 상태에서 해당 개체를 검사하고 수정할 수 있습니다. 결과적으로 실제 문제를 발견하기가 어렵습니다.

일시중단() 메서드는 교착 상태에 빠지기 쉽습니다. suspens()가 호출되면 대상 스레드는 중지되지만 이전에 획득한 잠금은 여전히 ​​유지됩니다. 이 시점에서 "일시중단된" 스레드가 작업을 재개하지 않는 한 다른 스레드는 잠긴 리소스에 액세스할 수 없습니다. 모든 스레드에 대해 대상 스레드를 재개하고 동시에 잠긴 리소스를 사용하려고 하면 교착 상태가 발생합니다. 따라서 suspens()를 사용해서는 안 되며 Thread 클래스에 플래그를 넣어 스레드가 활성 상태인지 일시 중지되어야 하는지 여부를 나타냅니다. 플래그가 스레드를 일시 중단해야 함을 나타내면 wait()를 사용하여 대기 상태로 들어가도록 명령합니다. 플래그가 스레드를 재개해야 함을 나타내는 경우, inform()을 사용하여 스레드를 다시 시작하십시오.

위는 sleep()과 wait()의 차이점에 대한 완전한 소개입니다. Java 비디오 튜토리얼에 대해 더 알고 싶다면 PHP 중국어 웹사이트에 주목하세요.

위 내용은 sleep()과 wait()의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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