다선정 실현의 세 가지 방법

3107 단어
하나.Runnable 인터페이스를 실현하고 이 인터페이스의run () 방법을 실현합니다.
주요 단계:
4
  • 사용자 정의 클래스와 Runnable 인터페이스를 실현하고run() 방법을 실현한다

  • 4
  • Thread 대상을 만들고 Runnable 인터페이스를 실현한 대상을 매개 변수로 삼아 Thread 대상을 실례화합니다

  • 4
  • Thread의 start 방법을 호출합니다.
  • class MyThread implements Runnable {
         // create my own Thread class
        public void run() {
            System.out.println("Thread body");
        }
    
    }
    
    public class Test {
        public static void main(String[] args) {
            MyThread thread = new MyThread();
            Thread t = new Thread(thread);
            t.start(); //start the thread
        }
    }
    

    둘.Thread 클래스를 계승하고 런 방법을 다시 씁니다.
    Thread는 Runnable 인터페이스를 실현한 실례로 하나의 라인의 실례를 대표하고 라인을 시작하는 유일한 방법은 Thread 종류의 start () 방법을 통과하는 것이다.start () 방법은 native (로컬) 방법으로 새 라인을 시작하고run () 방법을 실행합니다. (Thread에서 제공하는run () 방법은 빈 방법입니다.start () 방법이 호출되면 바로 다중 루틴 코드를 실행하는 것이 아니라, 이 루틴을 실행 가능한 (Runnable) 상태로 바꾸고, 다중 루틴 코드를 언제 실행할지 운영체제에 의해 결정됩니다.
    class MyThreadB extends Thread {
        public void run() {
            System.out.println("Thread body");
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
          MyThreadB thread = new MyThreadB();
          thread.start();
        }
    }
    

    셋.Callable 인터페이스를 구현하고 call () 방법을 다시 씁니다.
    . Callable 대상은 실제적으로 Executor 프레임워크의 기능 클래스에 속하고 Callable 인터페이스는 Runnable 인터페이스와 유사하지만 다음과 같은 세 가지 기능을 제공합니다. **
    4
  • Callable는 작업이 끝난 후에 되돌아오는 값을 제공할 수 있으며 Runnable에서는 이 기능을 제공할 수 없습니다

  • 4
  • Callable의 콜() 방법은 이상을 던질 수 있지만 Runnable의run() 방법은 이상을 던질 수 없습니다

  • 4
  • Callable를 실행하면 하나의 Future 대상을 얻을 수 있으며 Future 대상은 비동기적인 계산의 결과를 나타낸다.그것은 계산이 완성되었는지 검사하는 방법을 제공했다.스레드는 비동기 계산 모델에 속하기 때문에 다른 스레드에서 방법의 반환 값을 얻을 수 없습니다. 이 경우, 목표 스레드가call() 방법을 호출하는 경우를 Future의 get() 방법을 호출하여 결과를 얻을 때, 현재 스레드는call() 방법이 결과를 반환할 때까지 막힙니다
  • import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    /**
     * Created by qd on 12/5/17.
     */
    
    public class CallableAndFuture {
    
        public static class CallableTest implements Callable {
            public String call() throws Exception {
                return "Hello World!";
            }
        }
    
        public static void main(String[] args) {
            ExecutorService threadPool = Executors.newSingleThreadExecutor();
    
            Future future = threadPool.submit(new CallableTest());
            try {
                System.out.println("waiting thread to finish");
                System.out.println(future.get()); //      ,       
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    다중 루틴을 실현해야 할 때 일반적으로 Runnable 인터페이스를 실현하는 방식을 추천한다. 이유는 다음과 같다. 먼저Thread류는 여러 가지 방법이 파생류에 의해 사용되거나 다시 쓸 수 있지만 런 방법만 다시 써야 한다. 런 방법에서 이 루틴의 주요 기능을 실현한다.이것은 당연히 Runnable 인터페이스를 실현하는 데 필요한 같은 방법이다.그리고 많은 자바 개발자들은 하나의 클래스가 강화되거나 수정되어야 계승될 수 있다고 생각한다.따라서 Thread 클래스의 다른 방법을 다시 사용할 필요가 없다면 Thread의 실현 방식을 계승함으로써 Runnable 인터페이스를 실현하는 것과 같은 효과가 있을 경우 Runnable 인터페이스를 실현하는 방식으로 라인을 만드는 것이 좋다.

    좋은 웹페이지 즐겨찾기