자바 라인의 시작, 정지, 계속

Android 프로젝트의 요구 사항: 루트를 통해 파일 내용을 읽을 수 있으며, 루트의 시작, 정지, 계속을 제어하여 파일을 읽을 수 있습니다.여기에 기록하다.
메인 라인에서wait,notify,notifyAll을 통해 파일을 읽는 라인 (하위 라인) 을 제어하고 오류를 보고합니다:java.lang.IllegalMonitorStateException.
주의해야 할 몇 가지 문제:
  • 어느 때든지 대상의 통제권(monitor)은 한 라인에서만 가질 수 있다..
  • 실행 대상의wait,notify,notifyAll 방법이든 현재 실행 중인 라인이 이 대상의 제어권(monitor)을 얻었음을 보증해야 한다..
  • 제어권이 없는 라인에서 대상을 실행하는 상기 세 가지 방법은java를 잘못 보고합니다.lang.IllegalMonitorStateException.
  • JVM은 다중 스레드를 기반으로 하므로 기본적으로 런타임 스레드의 시퀀스를 보장할 수 없습니다
  • 스레드를 제어할 수 있는 3가지 방법:
  • 실행 대상의 동기화 실례 방법..
  • 실행 대상 대응 클래스의 동기화 정적 방법..
  • 객체에 동기식 잠금을 넣은 동기식 블록 실행..
  • 온라인 클래스를 시작하고, 멈추고, 계속 봉인하고, 이 실례를 직접 호출하면 됩니다.
    
    public class ReadThread implements Runnable{
      public Thread t;
      private String threadName;
      boolean suspended=false;
      public ReadThread(String threadName){
       this.threadName=threadName;
       System.out.println("Creating " + threadName );
      }
      public void run() {
       for(int i = 10; i > 0; i--) {
       System.out.println("Thread: " + threadName + ", " + i);
       // Let the thread sleep for a while.
       try {
        Thread.sleep(300);
        synchronized(this) {
         while(suspended) {
          wait();
         }
        }
       } catch (InterruptedException e) {
        System.out.println("Thread " + threadName + " interrupted.");
        e.printStackTrace();
       }
       System.out.println("Thread " + threadName + " exiting.");
       }
      }
      /**
       *  
       */
      public void start(){
       System.out.println("Starting " + threadName );
       if(t==null){
        t=new Thread(this, threadName);
        t.start();
       }
      }
      /**
       *  
       */
       void suspend(){
       suspended = true;
      }
       /**
       *  
       */
       synchronized void resume(){
        suspended = false;
        notify();
       }
     }
    
    이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!

    좋은 웹페이지 즐겨찾기