자바 멀티 스레딩 여러 구현

1. Thread 클래스 상속, run 메소드 오버라이드 (override)
, 실행 방법, 대상 스레드와 같은 객체 구현 예제의 Runnable 인터페이스 구현 클래스 생성자 오버라이드 (override) 2. Runnable를 구현을
호출 가능 통해 스레드와 FutureTask 만들기 3.,
4.에 의해 스레드 풀 만들기 스레드 (이미 언급 한)

의 결과를 반환 할 수있는 방법이 없습니다, 실행 방법을 다시 작성하여, 반환 값이 무효 실시 예를 실행하는 것을 없음 반환 값 간단한 이유 : 상기 2 종류의 클래스로 표시 될 수 있습니다 
호출 가능하여, 값을 반환 클래스에 기인 할 수있다 후자의 두 결과는 대상 개체로 반환 할 수 있도록 인터페이스 방법이 실현 될 것입니다 전화, 반환 값은 객체이며,

옵션 1 : 스레드 스레드 클래스 상속 구현은 다음과 같습니다 :

공공  클래스 ThreadDemo01 (가) 확장 스레드 {
     공공 ThreadDemo01 () {
         // 쓰기 서브 클래스의 생성자가 기본 수 
    }
     공공  무효 {) RUN을 (
         // 자신의 스레드 코드의 준비 
        에서 System.out.println을 (는 Thread.currentThread (). getName ()); 
    } 
    공공  정적  무효 메인 (문자열 []에 args) { 
        threadDemo01 threadDemo01 = 새로운 새 threadDemo01 (); 
        threadDemo01.setName ( "I는 사용자 스레드 (1)." ) 
        threadDemo01.start을 ()        
        에서 System.out.println을 (는 Thread.currentThread의 toString () ().);    
    }
}

 

프로그램 결과 : 
스레드 [5 주 주요] 
I는 사용자 스레드 1이었다

파라미터 화 된 생성자 스레드 파라미터로서 타깃 쓰레드 인터페이스 클래스로서 구현 된 Runnable 인터페이스가 구현 예 실행 방법을 구현하여, 스레드를 시작하는 시작 () 메소드를 호출하여 2 스레드 구현

공용  클래스 ThreadDemo02 { 

    공공  정적  무효 메인 (문자열 []에 args) { 
        에서 System.out.println (는 Thread.currentThread () getName ().); 
        스레드 (T1) = 새로운 스레드 ( 새로 MyThread ()); 
        t1.start (); 
    } 
} 

클래스 MyThread는 구현 의 Runnable { 
    @Override 
    공공  무효 실행 () {
         // TODO 자동 생성 방법 스텁 
        에서 System.out.println (는 Thread.currentThread () getName () + "-.>我是通过实现接口的线程实现方式! " ); 
    }    
}

 

: 프로그램의 결과 
주요 
스레드-0-이> I 인터페이스를 구현하는 스레드의 방법에 의해 달성된다!

스레드 구현 3 : 호출 가능하고 FutureTask 의해 만들어진 스레드 
호출 인터페이스 구현 클래스를 작성하고, 통화 방법 구현하십시오 
FutureTask 객체 호출 가능 객체를 캡슐화 호출 가능 객체 포장 FutureTask를 사용하여 구현 호출 가능 구현 클래스를 생성하는 통화 방법 : B를 반환 값 
C는 : FutureTask 객체를 사용하여 타겟 스레드 객체를 생성하고 스레드를 시작 
D : 리턴 값의 자식 스레드가 실행 종료를 얻을 호출 FutureTask 오브젝트 GET ()를

공용  클래스 ThreadDemo03 { 

    / ** 
     * @param의 인수
      * / 
    공공  정적  무효 메인 (문자열 []에 args) {
         // TODO 자동 생성 방법 스텁 

        호출 가능 <object> = oneCallable 새로운 티켓 <object> (); 
        FutureTask <object> = oneTask 새로운 FutureTask <object> (oneCallable); 

        스레드 t = 새로운 스레드 (oneTask); 

        에서 System.out.println (는 Thread.currentThread () getName ().); 

        t.start (); 

    } 

} 

클래스티켓 <개체> 구현 주는, Callable <개체> { 

    // 재정의 메서드 호출 
    @Override
     공공 개체 () 호출이 발생 예외에게 {
         // 해야할 일 자동 생성 된 스텁 방법 
        에서 System.out.println (는 Thread.currentThread (). GetName () + - "> 나는 FutureTask 호출 인터페이스 스레드에 의해 패키지를 구현함으로써 달성된다" );
         반환  널 (null)을 ; 
    }    
}

 

: 프로그램 결과 
메인 
스레드가 0-> I 인터페이스 스레드 구현 FutureTask 호출 가능 래퍼에 의해 달성된다

스레드 구현 4 : 스레드 풀에서 스레드를 생성

공공  클래스 ThreadDemo05 { 

    개인  정적  INT의 POOL_NUM = 10;     // 线程池数量

    / ** 
     * @param 인수 
     * @throws 예외 : InterruptedException 
      * / 
    공공  정적  무효 메인 (문자열 [] 인수)를 발생 예외 : InterruptedException을 {
         // TODO 자동 생성 방법 스텁 
        ExecutorService를 ExecutorService를 Executors.newFixedThreadPool = (5 );  
        위한 ( int로 ; 나는 POOL_NUM <I가 ++를 I = 0 )   
        {   
            RunnableThread 스레드= 새로운 새로운 RunnableThread (); 

            // 에 Thread.sleep (1000); 
            executorService.execute (스레드);   
        } 
        // 스레드 풀 닫습니다 
        executorService.shutdown를 (); 
    }    

} 

클래스 RunnableThread 구현은 실행 가능한   
{      
    @Override 
    공공  무효 RUN ()   
    {   
        시스템 (.out.println "스레드 풀 스레드에 의해 만들어진" "."+는 Thread.currentThread () getName () + );   

    }   
}  

 

: 프로그램 결과 
스레드 풀 모드에 의해 생성 된 쓰레드 풀 -1- 스레드 3 
스레드 풀 모드가 생성 스레드 : 풀 1 스레드 -4- 
스레드 풀 모드가 생성 스레드 : 풀 1 스레드 1 
내지 풀 -1- 스레드 5 : 스레드는 스레드 풀 모드 생성 
스레드 풀 모드가 생성 스레드 : 풀 -1- 스레드 2 
스레드 풀 모드가 생성 스레드 : 풀 1 스레드 -5- 
스레드 풀 모드에 의해 생성을 쓰레드 풀 1 스레드 1 
스레드 풀 모드가 생성 스레드 : 풀 1 스레드 -4- 
스레드 풀 모드가 생성 스레드 : 풀 -1- 스레드 3 
스레드 풀 모드가 생성 스레드 : 풀 1 -thread-2

ExecutorService를가 호출 가능는 집행 인 프레임 워크에 속한다. JDK1.5에서 새로운 스레드를 도입 한 결과를 돌려가 미래 인터페이스 프레임 워크는이 기능이 반환 값을 얻기 위해 매우 편리으로, 속한다. 
알 수있는 분석을 통해, 그는 또한 호출 인터페이스, 통화 방법을 구현하므로 반환 값이 있습니다. 이것이 바로 앞서 언급 한 두 가지 분류와 일치한다

호출 가능 작업을 수행 한 후, 당신은 미래의 객체를 얻을 당신이 개체 호출 가능 작업의 반환에 얻을 수있는 개체를 얻을 호출 할 수 있습니다. 얻는 방법 즉, 차단 : 어떤 스레드가 결과를 반환, get 메소드는 대기합니다.

그런 다음 실행자 클래스를 소개 : 스레드 풀, 스레드 풀 수익률이 달성 한 ExecutorService를 인터페이스를 생성하는 팩토리 메소드의 시리즈를 제공합니다.

공용 ExecutorService를 정적 인 newFixedThreadPool (INT의 nThreads) 
고정 된 수의 스레드를 생성 스레드 풀.
공공 정적 ExecutorService를 newCachedThreadPool는 () 
(스레드가 사용 가능한 경우) 이전에 건설 재사용됩니다 실행하는 캐시 된 스레드 풀 스레드 호출을 작성합니다. 기존의 스레드를 사용할 수없는 경우, 새로운 스레드가 생성되어 풀에 추가됩니다. 종료 및 캐시에서 60 초 동안 사용하지 않은 thread를 제거합니다.
공공 정적 ExecutorService를 newSingleThreadExecutor ()는 
단일 스레드 실행 프로그램을 만들 수 있습니다.
정적 ScheduledExecutorService를 인 newScheduledThreadPool 공개 (INT의 
corePoolSize를)이 
규칙적이고주기적인 작업 실행을 지원하기 위해 스레드 풀을 만들려면 대부분의 경우 Timer 클래스를 대체하는 데 사용할 수 있습니다.
, ExecutoreService () 메소드를 제출 제공하는 호출 가능 A, 또는 실행 가능한 전달, 미래를 반환합니다. 배경 스레드 풀 집행자가 완료 Callable를 계산하지 않은 경우,이 호출은 계산이 완료 될 때까지 미래 오브젝트의 get () 메소드는 차단됩니다 반환합니다.

요약 :
스레드에서 알리의 조언을 인용 :

 

 

 


원본 링크 : HTTPS : //blog.csdn.net/java_zyq/article/details/87917734

추천

출처www.cnblogs.com/diandianquanquan/p/11434037.html