이 코드에는 몇 가지 문제점이 있습니다. 난 당신이 이런 식으로 뭔가를 쓰기 위해 노력하고 의심 :
public static synchronized void main(String[] args) throws InterruptedException {
System.out.print("X");
Thread.sleep(10000);
System.out.print("Y");
}
Thread.sleep()
방법은 지정된 간격에 대한 현재 스레드를 일시 중단합니다. Object.wait()
은 완전히 다른 것인데, 그것이 당신이 원하는 것일 것 같지 않습니다.
내가 스레드 t
을 어떻게 제거했는지 알 수 있습니다. 별도의 스레드를 만들고 그 스레드에서 인쇄물을 생성하려면 스레드에게 무언가를 제공해야합니다. 당신이 t.start()
빈을 호출 그렇게 할 때, 원래의 코드가없는 스레드 몸 스레드를 생성하는 사실이었다 기록으로
public static synchronized void main(String[] args) {
Thread t = new Thread() {
public void run() {
System.out.print("X");
try { Thread.sleep(10000); } catch (InterruptedException e) { }
System.out.print("Y");
}
};
t.start();
}
: 그 작업을 수행하는 가장 쉬운 방법은 스레드의 run()
메소드를 오버라이드 (override)가 스레드 코드를 가지고있다 스레드는 백그라운드에서 시작하여 즉시 죽을 것입니다.
슬립 호출이 스레드 내부로 마이그레이션되었으므로 InterruptedException
에 try/catch 절을 추가해야한다는 것에 유의하십시오. run()
은 예외를 throw 할 수 없으므로 불행히도 예외를 포착하고 무시해야합니다.
이 글을 쓰는 또 다른 방법은 스레드 t
의 나머지 작업과 메인 스레드의 나머지 작업을 수행하는 것입니다. 다음은 두 개의 스레드로 작업을 따로 분리하는 방법은 다음과 같습니다
public static synchronized void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
public void run() {
System.out.print("X");
try { Thread.sleep(10000); } catch (InterruptedException e) { }
}
};
t.start();
t.join();
System.out.print("Y");
}
을이 스레드가 자고 있기 때문에 10 초 걸릴 것이다, 실행을 완료하는 것이 대기 t.join()
호출합니다. 스레드가 완료되면 join()
메서드가 돌아가서 주 스레드를 계속 허용합니다. 최종 결과는 사용자에게 동일하게 나타납니다. 프로그램은 X를 인쇄하고 10 초 동안 일시 중지 한 다음 Y를 인쇄합니다.