스레드를 생성하는 3 가지 방법

세 가지 방법의 스레드를 만듭니다 :

(1) 스레드 클래스 상속

(2) Runnable를 구현

(3) 호출 가능 인터페이스를 구현

코드 예 :

1, 상속 스레드 클래스

. 1  패키지 com.sxt.thread;
 2  
. 3  / ** 
. 4  * @ClassName StartThread
 . 5  * 스레드 시스템을 만들기 :
 6  * 1. 만들기 : 스레드 + 상속 RUN를 오버라이드 (override)
 . 7  * 2. 시작 : 서브 클래스 객체 시작 +를 만듭니다
 . 8   * / 
. 9 개  공용  클래스 StartThread (가) 연장 실을 {
 10  
. 11      / ** 
12은       * @description 스레드의 엔트리 포인트
 (13)는       * @date 2019년 7월 23일 16시 4분
 14       파라미터 : []
 15       * @ 반환 공극
 16       * * / 
. 17      @Override는
 (18)      공개 보이드 RUN () {
 . 19          위해 ( int로 I = 0; I (20)는 <; I는 ++ ) {
 20이다              에서 System.out.println ( "음악을 들으면서" );
 21이다          }
 22이다      }
 (23)은  
24 일      공개  정적  무효 메인 (문자열 []에 args) {
 25          //는 서브 클래스 객체 생성 
(26)          StartThread ST = 새 새 , StartThread을 ()
 (27)          //이 시작 
28          ) st.start을 (; // CPU에 의해 호출, 즉시 실행 보장 할 수 없습니다
 (29)          // st.run (); // 일반 메소드 호출 
(30)          에 대한 ( INTI = 0; I (20)는 <; I는 ++ ) {
 31이다              에서 System.out.println ( "코드 기록 측" );
 32          }
 33      }
 34 }

2, Runnable를 구현

. 1  패키지 com.sxt.thread;
 2  
. 3  / ** 
. 4  * @ClassName StartThread
 . 5  * 스레드 방식을 만들 :
 6  * 1. 만들기 : 실행 가능한 + 재기록 RUN을 달성하기 위해
 . 7  * 2. 시작 : 스레드 객체를 구현하는 객체 클래스를 만듭니다 + + 시작
 8.  * 
 9.  * 추천 : 우선적으로 인터페이스를 사용하여 단일 상속의 한계를 피하는
 10  * 자원을 공유 촉진
 . 11   * / 
12는  대중  클래스 StartRun 구현이 실행 가능한 {
 13  
14      / ** 
15       * @description 스레드의 진입 점
 (16)       * 2019- @date 16시 4분 07-23
 . 17       @Param은 [] *
 (18)는       * @return보이드
 . 19       * * / 
20 인      @Override
 21은      공개  공극 RUN () {
 (22)          에 대해 ( int로 , I (20)는 <; I = 0 I가 ++ ) {
 23이다              에서 System.out.println ( "음악을 들으면서" );
 24          }
 25      }
 26은  
27      공공  정적  무효 메인 (문자열 []에 args) {
 28          / * 
29          // 클래스 객체 구현 만들기
 30          = () StartRun에게 새로운 새 StartRun의 SR을,
 31이다          // 프록시 클래스 오브젝트 작성
 32          스레드 새로운 새로운 T는 나사 (SR)를 =;
 33이다          // 출발
34          t.start은 (); CPU가 호출에 의해, 즉시 실행을 보장하지 //
 35          * / 
36          // 객체가 한 번만 사용하는 경우, 사용하여 만들 수 있습니다 익명 
37          새로운 새로운 스레드 ( 새로운 새로운 시작 StartRun () ());
 38 인          // st.run (); // 일반적인 메소드 호출을 
39           ( int로 I = 0; I는 ++, I (20)는 < ) {
 40              에서 System.out.println ( "코드 기록 측" );
 41          }
 42      }
 43 }

요약 :

  예 :

  • 대상 고객을 만들기 : IDownloader 아이디 = 새로운 IDownloader ( "사진 주소", "baidu.png을");
  • + 대상체와 연관된 스레드 객체 생성 : 스레드 t = 새로운 스레드 (ID)를;
  • 스레드를 시작 t.start을 ()

3, 호출 인터페이스를 구현

. 1  패키지 com.sxt.thread,
 2  
3.  가져 오기 있는 java.util.concurrent. * ;
 4.  
5.  / ** 
6.  * 스레드 세 가지 만드는 방법을 이해 :합니다 (JUC을)
 7.  * 호출 가능 인터페이스 메소드를 오버라이드에게 전화를 구현
 8  *
 9   * / 
10  공용  클래스 CDownloader 유단 주는, Callable <불> {
 11.  
12      개인 문자열 URL은; // 원격 경로 
(13)는      개인 , 문자열 이름 // 점포 명 
14  
15      공중 CDownloader (URL 문자열, 문자열 이름) {
 16          이 본.URL = URL;
17           .name을 = 이름;
18      }
 19  
20      @Override
 21      공개 부울 () 호출이 발생 예외 {
 22  
23          WebDownloader WD = 새로운 WebDownloader ();
24          wd.download (URL, 이름);
25          에서 System.out.println ( "图片名称"+ 이름);
(26)          반환  사실 ;
27      }
 28  
29      공공  정적  무효 메인 (문자열 []에 args) 슬로우ExecutionException, 예외 : InterruptedException {
 30  
31          CDownloader CD1 = 새로운 CDownloader ( "https://res.vmallres.com/pimages/detailImg/2019/06/03/20190603145749911985.jpg", "20190603145749911985.jpg" );
32          CDownloader CD2 = 새로운 CDownloader ( "https://res.vmallres.com/pimages/detailImg/2019/06/03/201906031457493181984.jpg", "201906031457493181984.jpg" );
33          CDownloader CD3 = 새로운 CDownloader ( "https://res.vmallres.com/pimages/detailImg/2019/06/03/201906031457505691446.jpg", "201906031457505691446.jpg" );
 
                  
37          ExecutorService를 빼앗아 = Executors.newFixedThreadPool (3 );
38          // 3提交执行: 
39          미래 <불> 결과 1 = ser.submit (CD1);
40          미래 <불> result2 = ser.submit (CD2);
41          미래 <불> result3 = ser.submit (CD3);
(42)          // 제获取结果: 
43          부울 R1 = result1.get ();
44          부울 R2 = result2.get ();
45 개          부울 R3 = result3.get ();
46          에서 System.out.println (R3);
47          // 5.关闭服务: 
48         ser.shutdownNow ();
49      }
 50 }

 

추천

출처www.cnblogs.com/116970u/p/11233165.html