JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성

자바 에서 스 레 드 를 만 드 는 방법 은 두 가지 가 있 습 니 다. 하 나 는 Thread 를 계승 하 는 것 이 고 다른 하 나 는 Runnable 인 터 페 이 스 를 실현 하 는 것 입 니 다. Thread 는 실제로 Runnable 인 터 페 이 스 를 실현 합 니 다.
Thread
구조 방법
방법
설명 하 다.
Thread()
새로운 Thread 대상 할당
Thread(Runnable target)
새로운 Thread 대상 할당
Thread(Runnable target, String name)
새로운 Thread 대상 할당
Thread(String name)
새로운 Thread 대상 할당
Thread(ThreadGroup group, Runnable target)
새로운 Thread 대상 할당
Thread(ThreadGroup group, Runnable target, String name)
target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다.
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
target 을 실행 대상 으로 할 수 있 도록 새로운 Thread 대상 을 할당 합 니 다. 지정 한 name 을 그룹 이 참조 하 는 스 레 드 그룹의 일원 으로 지정 한 스 택 크기 를 가지 고 있 습 니 다.
Thread(ThreadGroup group, String name)
새로운 Thread 대상 할당
방법 요약
반환 값
방법
설명 하 다.
static int
activeCount()
현재 스 레 드 의 스 레 드 그룹 에서 활동 스 레 드 의 수 를 되 돌려 줍 니 다.
void
checkAccess()
현재 실행 중인 스 레 드 가 이 스 레 드 를 수정 할 권리 가 있 는 지 판단 합 니 다.
static Thread
currentThread()
현재 실행 중인 스 레 드 대상 에 대한 인용 을 되 돌려 줍 니 다.
static void
dumpStack()
현재 스 레 드 의 스 택 추적 을 표준 오류 흐름 으로 인쇄 합 니 다.
static int
enumerate(Thread[] tarray)
현재 스 레 드 의 스 레 드 그룹 과 하위 그룹 에 있 는 모든 활동 스 레 드 를 지정 한 배열 로 복사 합 니 다.
static Map
getAllStackTraces()
모든 활성 스 레 드 의 스 택 추적 맵 을 되 돌려 줍 니 다.
ClassLoader
getContextClassLoader()
이 스 레 드 의 컨 텍스트 ClassLoader 를 되 돌려 줍 니 다.
static Thread.UncaughtExceptionHandler
getDefaultUncaughtExceptionHandler()
이상 이 포착 되 지 않 아 갑자기 종 료 될 때 호출 되 는 기본 처리 프로그램 을 되 돌려 줍 니 다.
long
getId()
이 스 레 드 의 식별 자 를 되 돌려 줍 니 다.
String
getName()
이 스 레 드 의 이름 을 되 돌려 줍 니 다.
int
getPriority()
스 레 드 우선 순위 되 돌리 기
StackTraceElement[]
getStackTrace()
이 스 레 드 스 택 의 덤 프 를 표시 하 는 스 택 추적 요소 배열 을 되 돌려 줍 니 다.
Thread.State
getState()
이 스 레 드 의 상 태 를 되 돌려 줍 니 다.
ThreadGroup
getThreadGroup()
이 스 레 드 에 속 한 스 레 드 그룹 을 되 돌려 줍 니 다.
Thread.UncaughtExceptionHandler
getUncaughtExceptionHandler()
이 스 레 드 가 이상 을 포착 하지 못 해 갑자기 종 료 될 때 호출 된 처리 프로그램 을 되 돌려 줍 니 다.
static boolean
holdsLock(Object obj)
현재 스 레 드 가 지정 한 대상 에 모니터 잠 금 을 유지 할 때 만 true 로 돌아 갑 니 다.
void
interrupt()
인 터 럽 트 스 레 드
static boolean
interrupted()
현재 스 레 드 가 중단 되 었 는 지 테스트 합 니 다.
boolean
isAlive()
스 레 드 가 활성 상태 인지 테스트 합 니 다.
boolean
isDaemon()
이 스 레 드 가 수호 스 레 드 인지 테스트 합 니 다.
boolean
isInterrupted()
스 레 드 가 중단 되 었 는 지 테스트 합 니 다.
void
join()
이 스 레 드 가 종 료 될 때 까지 기 다 립 니 다.
void
join(long millis)
이 스 레 드 가 종 료 될 때 까지 기다 리 는 시간 은 최대 millis 밀리초 입 니 다.
void
join(long millis, int nanos)
이 스 레 드 가 종 료 될 때 까지 기다 리 는 시간 은 최대 millis 밀리초 + nanos 나 초 입 니 다.
void
run()
이 스 레 드 가 독립 된 Runnable 실행 대상 구 조 를 사용 하 는 경우 이 Runnable 대상 의 run 방법 을 호출 합 니 다.그렇지 않 으 면 이 방법 은 어떠한 조작 도 하지 않 고 되 돌아 갑 니 다.
void
setContextClassLoader(ClassLoader cl)
이 스 레 드 의 컨 텍스트 ClassLoader 설정
void
setDaemon(boolean on)
이 스 레 드 를 수호 스 레 드 나 사용자 스 레 드 로 표시 합 니 다.
static void
setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
스 레 드 가 이상 을 포착 하지 못 해 갑자기 종료 되 고 이 스 레 드 에 다른 처리 프로그램 을 정의 하지 않 았 을 때 호출 되 는 기본 처리 프로그램 을 설정 합 니 다.
void
setName(String name)
스 레 드 이름 을 변경 하여 인자 name 과 같 게 합 니 다.
void
setPriority(int newPriority)
스 레 드 우선 순위 변경
void
setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
이 스 레 드 가 이상 이 포착 되 지 않 아 갑자기 종 료 될 때 호출 되 는 처리 프로그램 을 설정 합 니 다.
static void
sleep(long millis)
지정 한 밀리초 동안 현재 실행 중인 스 레 드 를 휴면 (실행 정지) 시 킵 니 다. 이 조작 은 시스템 타이머 와 스케줄 러 의 정밀도 와 정확성 에 영향 을 받 습 니 다.
static void
sleep(long millis, int nanos)
지정 한 밀리초 에 지정 한 나 초 수 를 추가 하여 현재 실행 중인 스 레 드 를 휴면 시 킵 니 다 (실행 정지). 이 조작 은 시스템 타이머 와 스케줄 러 의 정밀도 와 정확성 에 영향 을 받 습 니 다.
void
start()
이 스 레 드 를 실행 하기 시작 합 니 다.자바 가상 컴퓨터 가 이 스 레 드 를 호출 하 는 run 방법
String
toString()
이 스 레 드 의 문자열 표시 형식 을 되 돌려 줍 니 다. 스 레 드 이름, 우선 순위, 스 레 드 그룹 을 포함 합 니 다.
static void
yield()
현재 실행 중인 스 레 드 대상 을 일시 정지 하고 다른 스 레 드 를 실행 합 니 다.
사용 예시
public class ThreadDemo {
   public static void main(String[] args)
   {
      PrintThread thread1 = new PrintThread();
      PrintThread thread2 = new PrintThread();
      // 通过start方法启动线程
      thread1.start();
      thread2.start();
   }
}

/** * 继承Thread * * @author jianggujin * */
class PrintThread extends Thread
{
   /** * 重写run方法,线程执行的逻辑写在该方法内 */
   @Override
   public void run()
   {
      for (int i = 0; i < 10; i++)
      {
         try
         {
            // 使线程休眠100毫秒,使结果更直观
            Thread.sleep(100);
         }
         catch (InterruptedException e)
         {
            e.printStackTrace();
         }
         System.out.println(getName() + ":" + i);
      }
   }
}

실행 결 과 는 다음 과 같 습 니 다: Thread - 1: 0 Thread - 0: 1 Thread - 1: 1 Thread - 0: 2 Thread - 0: 3 Thread - 1: 3 Thread - 0: 4 Thread - 1: 4 Thread - 1: 5 Thread - 0: 6 Thread - 0: 7 Thread - 1: 7 Thread - 0: 8 Thread - 1: 8 Thread - 1: 9 Thread - 0: 9
위의 예제 에서 우 리 는 Thread 를 계승 하 는 방식 으로 스 레 드 대상 을 만 들 고 start () 방법 으로 스 레 드 를 시작 했다. 예 를 들 어 우 리 는 두 스 레 드 를 시작 했다. 스 레 드 는 간단 한 출력 한 마디 일 뿐 운행 결 과 를 보면 두 스 레 드 가 교차 하여 실 행 된 것 을 발견 할 수 있다.
Runnable
방법 요약
반환 값
방법
설명 하 다.
void
run()
인터페이스 Runnable 을 실현 하 는 대상 을 사용 하여 스 레 드 를 만 들 때 이 스 레 드 를 시작 하면 독립 적 으로 실행 되 는 스 레 드 에서 대상 을 호출 하 는 run 방법 을 가 져 옵 니 다.
사용 예시
public class ThreadDemo {
   public static void main(String[] args)
   {
      PrintThread thread1 = new PrintThread("Thread-0");
      PrintThread thread2 = new PrintThread("Thread-1");
      // 使用该种方式启动线程
      new Thread(thread1).start();
      new Thread(thread2).start();
   }
}

/** * 实现Runnable接口 * * @author jianggujin * */
class PrintThread implements Runnable
{
   // 用于标识线程
   private String name;

   public PrintThread(String name)
   {
      this.name = name;
   }

   /** * 实现run方法,线程执行的逻辑写在该方法内 */
   @Override
   public void run()
   {
      for (int i = 0; i < 10; i++)
      {
         try
         {
            // 使线程休眠100毫秒,使结果更直观
            Thread.sleep(100);
         }
         catch (InterruptedException e)
         {
            e.printStackTrace();
         }
         System.out.println(getName() + ":" + i);
      }
   }

   public String getName()
   {
      return name;
   }
}

실행 결과: Thread - 0: 0 Thread - 1: 1 Thread - 0: 1 Thread - 0: 2 Thread - 1: 2 Thread - 0: 3 Thread - 1: 3 Thread - 0: 4 Thread - 1: 4 Thread - 1: 5 Thread - 0: 6 Thread - 0: 7 Thread - 1: 7 Thread - 0: 8 Thread - 1: 8 Thread - 1: 9 Thread - 0: 9
join()
때때로 우 리 는 한 라인 이 실 행 된 후에 다른 라인, 예 를 들 어 초기 화 작업 을 계속 실행 하 기 를 희망 한다.이 럴 때 우 리 는 join() 방법 을 사용 할 수 있 습 니 다. join () 방법 은 이 스 레 드 가 종 료 될 때 까지 기다 릴 수 있 습 니 다.
사용 예시
public class ThreadDemo {
   public static void main(String[] args)
   {
      PrintThread thread1 = new PrintThread();
      PrintThread thread2 = new PrintThread();
      // 通过start方法启动线程
      thread1.start();
      try
      {
         //等待线程执行结束
         thread1.join();
      }
      catch (InterruptedException e)
      {
         e.printStackTrace();
      }
      thread2.start();
   }
}

/** * 继承Thread * * @author jianggujin * */
class PrintThread extends Thread
{
   /** * 重写run方法,线程执行的逻辑写在该方法内 */
   @Override
   public void run()
   {
      for (int i = 0; i < 10; i++)
      {
         try
         {
            // 使线程休眠100毫秒,使结果更直观
            Thread.sleep(100);
         }
         catch (InterruptedException e)
         {
            e.printStackTrace();
         }
         System.out.println(getName() + ":" + i);
      }
   }
}

실행 결과: Thread - 0: 0 Thread - 0: 1 Thread - 0: 2 Thread - 0: 3 Thread - 0: 4 Thread - 0: 6 Thread - 0: 7 Thread - 0: 8 Thread - 0: 9 Thread - 1: 1 Thread - 1: 2 Thread - 1: 3 Thread - 1: 4 Thread - 1: 5 Thread - 1: 6 Thread - 1: 7 Thread - 1: 8 Thread - 1: 9
실행 결 과 를 통 해 우 리 는 join 방법 을 사용 한 후에 스 레 드 실행 이 끝 난 후에 다른 스 레 드 를 계속 실행 하 는 것 을 볼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기