자바 스 레 드 생 성 방법 중 하나 인 Runnable 인터페이스, 익명 내부 클래스 쓰기 실현

스 레 드 생 성 방식 - Runnable 인터페이스 구현
다 중 스 레 드 는 매우 유용 합 니 다. 우 리 는 프로 세 스 에서 스 레 드 를 만 드 는 방식 은 세 가지 가 있 습 니 다.
  • 계승 스 레 드 클래스 Thread 를 직접 정의 합 니 다.run () 방법 을 다시 쓰 고 스 레 드 대상 이 스 레 드 대상 을 호출 하 는 start () 방법 으로 스 레 드 를 시작 합 니 다.
  • 전별 퀘 스 트 클래스 가 Runnable 인 터 페 이 스 를 실현 하고 run () 방법 을 다시 쓰 며 실천 퀘 스 트 대상 을 만 들 고 스 레 드 퀘 스 트 대상 을 스 레 드 대상 으로 포장 하여 스 레 드 대상 의 start () 방법 으로 스 레 드 를 시작 합 니 다.
  • Callable 인터페이스 (확장) 를 실현 합 니 다.

  • Thread 의 구조 기
    public Thread(){}
    public Thread(String name){}
    public Thread(Runnable target){}
    public Thread(Runnable target,String name){}
    

    Runnable 인 터 페 이 스 를 실현 하 는 방식.
  • 스 레 드 작업 클래스 를 만들어 Runnable 인 터 페 이 스 를 실현 합 니 다.
  • run () 방법 을 다시 씁 니 다.
  • 스 레 드 작업 대상 을 만 듭 니 다.
  • 스 레 드 작업 대상 을 스 레 드 대상 으로 포장
  • 스 레 드 대상 의 start () 방법 으로 스 레 드 를 시작 합 니 다.
  • public class ThreadDemo2 {
        public static void main(String[] args) {
            //3.          (      ,         )
            Runnable target = new MyRunnable();
            //4.            
            //Thread t1 = new Thread(target);
            Thread t2 = new Thread(target,"  1 ");
    
            //5.  start  
            t2.start();
    
            //       
            for (int i = 0; i < 10 ;i++){
                System.out.println(Thread.currentThread().getName()+"=>"+i);
            }
    
        }
    }
    
    //1.           runnable  
    class MyRunnable implements Runnable{
        //2.  run  
        @Override
        public void run() {
            for (int i = 0 ;i < 10 ; i++){
                System.out.println(Thread.currentThread().getName()+"=>"+i);
            }
        }
    }
    

    장점:
  • 스 레 드 퀘 스 트 류 는 Runnable 인터페이스 만 실현 하고 다른 종 류 를 계속 계승 할 수 있 으 며 다른 기능 을 계속 실현 할 수 있다
  • 같은 스 레 드 작업 대상 은 여러 스 레 드 대상 으로 포장 할 수 있다
  • 같은 프로그램 코드 의 여러 라인 이 같은 자원 을 공유 하기에 적합 하 다
  • 해 봉 작업 을 실현 하고 코드 는 여러 스 레 드 에 의 해 공유 되 며 스 레 드 작업 코드 와 스 레 드 가 독립 될 수 있 습 니 다.

  • 익명 내부 클래스 쓰기
    public class ThreadDemo3 {
        public static void main(String[] args) {
    
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 10; i++) {
                        System.out.println(Thread.currentThread().getName() + "=>" + i);
                    }
                }
            });
            t.start();
    
    
            //       
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "=>" + i);
            }
    
        }
    }
    

    좋은 웹페이지 즐겨찾기