1. Thread 클래스를 상속하고, 클래스의 run 메서드를 재정의하고, 클래스 객체의 start 메서드를 호출하고, start 메서드가 스레드를 시작하고, run 메서드를 호출하는 클래스를 정의합니다. Thread 클래스는 스레드를 설명하는 데 사용됩니다. 이 클래스는 스레드에서 실행할 코드를 저장하는 데 사용되는 함수 실행을 정의합니다.
2. Runnable 인터페이스를 구현하기 위한 클래스를 정의하고, Runnable 인터페이스의 메서드를 재정의하고, Thread 클래스를 통해 스레드 객체를 생성하고, Runnable 인터페이스의 하위 클래스 객체를 Thread 클래스의 생성자에 실제 매개변수로 전달하고, 호출합니다. 스레드를 시작하기 위한 Thread 클래스의 시작 메소드. Runnable 인터페이스 서브클래스의 run 메소드가 호출됩니다.
Runnable 인터페이스를 구현하는 방법은 단일 상속으로 인한 제한을 피합니다.
스레드 T;
T.setMaemon(true);//스레드를 백그라운드 스레드로 설정합니다. 모든 포그라운드 스레드가 끝나면 백그라운드 스레드가 자동으로 종료됩니다.
T.notify();//이 스레드를 깨우십시오.
T.notifyAll();//모든 스레드를 깨웁니다.
T.interrupt();//인터럽트 스레드;
Thread.sleep(100);//100밀리초 동안 스레드를 일시 중지합니다.
동기화: 기본적으로 자체적으로 잠기며 사용자 정의 개체도 잠길 수 있습니다.
두 개 이상의 스레드가 실행 중이어야 합니다. 여러 스레드가 동일한 잠금을 사용하므로 동기화 프로세스 중에는 하나의 스레드만 실행되어야 합니다.
동기화 결정: 멀티스레드 실행이 필요한 코드를 명확히 하고, 공유 데이터를 명확히 하고, 멀티스레드 실행 코드의 어떤 명령문이 공유 데이터에서 작동하는지 명확히 합니다.
클래스 티켓은 Runnable을 구현합니다.
{
개인 int 틱 = 100;
public void run() { // 공개 동기화 void run()
동안(틱 > 0) {
동기화됨 (이것) {
if (체크 > 0) {
노력하다 {
Thread.sleep(100);
} 잡기(InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + "판매:" + Tick--);
}
}
}
}
위와 같이 틱은 공유 데이터입니다. 틱을 작동하려면 티켓 자체가 동기화된 잠금으로 작동해야 합니다.
대기 깨우기 메커니즘: 동기화 스레드를 작동할 때 자신이 작동하는 스레드가 보유한 잠금을 식별해야 합니다. 동일한 잠금에 대한 대기 스레드만 동일한 잠금에 대한 알림을 통해 깨울 수 있습니다. ; (즉, 대기 및 깨우기는 동일한 잠금이어야 합니다)