java 제어 스레드 운행

2670 단어 java라인
1. 라인의 제어는 매우 흔하다. 예를 들어 파일이 절반으로 전송될 때 파일 전송을 멈추거나 파일 전송을 중지해야 한다. 이것은 사실상 라인의 운행을 제어하는 것이다.
2. 스레드는 생성, 실행 가능, 운행 중, 막힘, 사망 5개 상태가 있다.
생성:new 연산자를 사용하여 스레드 만들기
실행 가능: start 방법으로 라인을 시작한 후 시스템이 자원을 분배하였다
실행 중 상태: 라인을 실행하는run 방법
막힘: 운행하는 라인이 어떤 이유로 계속 운행을 멈추다
사망 상태: 스레드 종료
3. 전통적인 방법의 안전 문제
Thread의stop (),suspend (),resume (),destroy () 방법은 안전하지 않아서 자물쇠가 사라질 수 있습니다. 더 이상 사용하지 않습니다.
4. 어떻게 스레드의 운행을 제어합니까
예를 들어 만약에 어떤 파일의 전송이 10s가 필요하다면 전송을 어느 순간까지 멈추고 전송이 끝날 때까지 계속해야 한다.Runnable를 실현하는 방법으로 완성합니다. 우선 파일 전송의 Runnable 클래스입니다.
코드는 다음과 같습니다.

public class ThreadControlTest1 implements Runnable
{
 private int percent = 0;
 public void run()
 {
  while(true)
  {
   System.out.println(" :"+ percent +"%");
   try
   {
    Thread.sleep(1000);
   }
   catch(Exception ex)
   {}
   percent += 10;
   if(percent == 100)
   {
    System.out.println(" ");
    break;
   }
  }
 }
 public static void main(String[] args)
 {
  ThreadControlTest1 ft = new ThreadControlTest1();
  Thread th = new Thread(ft);
  th.start();
 }

}
5, 실행, 콘솔에서 인쇄 파일을 전송하는 시뮬레이션 과정.이 종류의 대상을 라인으로 실행하면while 순환이 10회 실행된 후에 종료됩니다.단, 어느 순간(예를 들어 5초 후)에 스레드 운행을 중단해야 합니다(예를 들어 1분). 그러나Thread 관련 함수를 사용할 수 없습니다. 어떻게 해야 합니까?
이 문제를 해결하려면 흔히 볼 수 있는 방법은 다음과 같다.
1. 멈추어야 할 때, 자원을 방출하기 위해 아예 라인의run 방법을 실행하도록 한다(실제로는 이 라인을 영구적으로 끝내는 것이다)
2. 라인을 계속해야 할 때, 새로운 라인을 개척하여 계속 작업한다
어떻게 런 방법을 끝냅니까? 런 방법 중while 순환이 있습니다. 순환을 바꾸는 표지를true에서false로 바꾸면 됩니다.
6. 위의 코드는 다음과 같이 변경할 수 있습니다.

public class ThreadControlTest1 implements Runnable
{
 private int percent = 0;
 private boolean isRun = true;
 public void run()
 {
  while(isRun)
  {
   System.out.println(" :"+ percent +"%");
   try
   {
    Thread.sleep(1000);
   }
   catch(Exception ex)
   {}
   percent += 10;
   if(percent == 100)
   {
    System.out.println(" ");
    break;
   }
  }
 }
 public static void main(String[] args)
 {
  ThreadControlTest1 ft = new ThreadControlTest1();
  Thread th = new Thread(ft);
  th.start();
  try
  {
   Thread.sleep(5000);
  }catch(Exception ex)
  {}
  ft.isRun = false;
  System.out.println(" ");
  try
  {
   Thread.sleep(1000*60);
  }catch(Exception ex)
  {}
  ft.isRun = true;
  th = new Thread(ft);
  th.start();
 }
}

좋은 웹페이지 즐겨찾기