세 가지 방법의 스레드를 만듭니다 :
(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 }