자바 병행 프로그래밍 만들기 (A) 스레드

자바 병행 프로그래밍 만들기 (A) 스레드

A는 기성품 각각 자신의 장점을 가지고 세, 각각 자신의 특성을 생성하는 방법은 세 가지가 있습니다. 프로젝트의 유연성은 필요에 따라 선택할 수 있습니다.

(A)의 구현

구현은 다수의 스레드를 실행하기 Runable 인터페이스를 사용하여 달성되지만, 실행의 방법은 어떠한 리턴 값 없으며, 예외를 발생시킬 수 실행되는 단점이있다.

public class ThreadOne implements Runnable {

    private int a = 10;

    @Override
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + a);
    }
}

class Test {
    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new ThreadOne());
        thread.start();
    }
}
复制代码

Thread 클래스 생성 및 구현 인터페이스 Runable이 스레드에 전달하는 객체입니다. 스레드를 실행하기 시작 메소드 호출 스레드.

두 번째 방법을 구현

자바는 단일 상속 언어이기 때문에 방법 두 스레드 클래스 상속이 클래스는, 그래서 당신 수 없습니다 상속 다른 클래스를 Thread 클래스를 상속, 고용 달성했다. 또한,이 방법은 실행 방법 및 예외를 던질 수 없습니다 run 메소드의 반환 값을 얻을 수 없습니다.

public class ThreadTwo extends Thread {

    private int a = 10;

    @Override
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + a);
    }
}

class TestTwo {
    public static void main(String[] args) throws Exception {
        ThreadTwo threadTwo = new ThreadTwo();
        threadTwo.start();
    }
}
复制代码

구현 세

방법 세 스레드는 리턴 값을 얻기 위해 호출 할 수있는 단점의 처음 두 가지 방법을 실현하는 순간 만회 콜 메소드가 예외를 발생시킬 수 있지만, 코드는 더 호출 인터페이스를 구현하여, 처음 두보다 복잡하고 호출 가능 구현 들어오는 클래스 인터페이스 구성 매개 변수는 FutureTask에의를 통해 다음 사실 FutureTask 플레이에서 중계 역할이다, 구조 매개 변수에 의해 미래의 스레드에 전달.

public class ThreadThree implements Callable {

    private int a = 10;

    @Override
    public Object call() throws Exception {
        synchronized (this){
            return ++a;
        }
    }
}

class TestThree {
    public static void main(String[] args) throws Exception{
        ThreadThree threadThree = new ThreadThree();

        for (int i = 0; i < 7; i++) {
            FutureTask<ThreadThree> threadThreeFutureTask = new FutureTask<ThreadThree>(threadThree);
            Thread thread = new Thread(threadThreeFutureTask);

            thread.start();
            System.out.println("线程返回值为:" + threadThreeFutureTask.get());

        }

        System.out.println("线程执行完毕");

    }
}
复制代码

개요

  1. 두 번째 접근 방식의 구현 및 실현은 세 번째 구현에 비해 비교적 간단하지만, 단점은, 실행 방법은 예외를 더 리턴 값 던질 수 없습니다되는 방법을 실행할 수 없습니다 만, 호출 방법을 얻을 수있는 세 번째 구현은 값 획득을 반환뿐만 아니라, 당신은 예외를 던질 수 있습니다.
  2. 방법의 세 번째 구현의 구현은 인터페이스의 구현에서 사용되지만, 단일 상속 자바 바인딩 될 스레드 클래스 상속을 달성하기 위해 두 가지 방법으로 사용

추천

출처juejin.im/post/5e678d40f265da576d60b70d