Thread.stop 동기화 이상 문제를 일으키는 코드 샘플

1602 단어 thread.net
Why is Thread.stop deprecated?
그 자체가 안전하지 않기 때문이다.한 라인을 멈추면 모든 자물쇠의 감시를 방출하게 된다.(사망 라인의 잠긴 감시상의 이상이 창고에서 전파된다).이전에 잠겨 있던 대상이 일치하지 않으면 다른 라인에서 일치하지 않는 상태를 볼 수 있습니다.이런 대상은 파괴된 것으로 인정할 수 있다.스레드가 파괴된 대상을 조작할 때 어떤 결과를 초래할 수 있습니다.이 현상은 미묘하고 눈치채기 어려울 수도 있고 드러날 수도 있다.다른 검사의 예외와 달리 Thread Death는 조용히 라인을 죽였기 때문에 사용자는 경고를 받지 못했습니다. 프로그램이 손상될 수 있습니다.문제는 언제든지 실제 손해가 발생할 수 있으며, 심지어는 몇 시간 또는 며칠 뒤에도 발생할 수 있다.
 
/**
 * Thread.stop 。<br>
 *  。 , 。
 * 
 * @author   JAVA (java2000.net)
 * 
 */
public class ThreadStopTest {
  private static Object lock = new Object();
  private static int number = 0;
  private static String name = "Name0";

  public static void main(String[] args) {
    ThreadStop t = new ThreadStop();
    t.start();
    ThreadRun t2 = new ThreadRun();
    t2.start();
    //  
    // number=1
    // name=Name0,
    //  stop, 
    // nunber=1
    // name=Name11
    t.stop();
  }

  static class ThreadRun extends Thread {
    public void run() {
      synchronized (lock) {
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        System.out.println("number=" + number);
        System.out.println("name=" + name);
      }
    }
  }

  static class ThreadStop extends Thread {
    public void run() {
      synchronized (lock) {
        number++;
        try {
          Thread.sleep(50);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        name = "Name" + number;
      }

    }
  }
}

좋은 웹페이지 즐겨찾기