5 분 멀티 스레드 방식을 만들기 위해 자바의 3 종류 배울 수

자바 스레드 작업을 만들 수있는 세 가지 기본 방법이 있습니다

방법 1 : Thread 클래스 상속

우리는 Thread 클래스를 상속 새 스레드 작업을 생성 할 수있는 run () 메소드를 오버라이드 (override) 할 수 있습니다.

// 继承 Thread 类
class MyThread extends Thread {
    private String name;
    
    public MyThread(String name) {
        this.name = name;
    }

	// 重写 run() 方法,任务代码放在这里
	@Override
    public void run() {
    	// 任务:报数
        for(int i = 0; i < 3; i++) {
            System.out.println(name + ": " + i);
        }
	}
}

public class Main {
    public static void main(String[] args) {
    	// 实例化 Thread 类,调用 start() 方法开启新线程
        MyThread t1 = new MyThread("线程1");
        MyThread t2 = new MyThread("线程2");
        t1.start();
        t2.start();
    }
}

있습니다 우리가 () 메서드는 새로운 스레드를 시작으로 열 수 있습니다 자동으로 실행 () 메소드 새 스레드 실행을 엽니 다.

우리가 여기 부르는 run () 메소드의 경우, 우리는 단지 단지, 새로운 스레드가 없을 것입니다 현재 스레드 실행 run () 메소드에서 만들어졌다.

프로그램 출력 :

线程1: 0
线程2: 0
线程2: 1
线程2: 2
线程1: 1
线程1: 2

우리는 당신이 때문에 당신은 다른 결과를 얻을 것이다, 우리는 경우 프로그램을 다시 실행 스레드 1 스레드 2는 크로스 운영 것을 발견 할 것이다, 자세히 보면 시도 스레드가 CPU 리소스를 잡아 수있는 스레드 사이에 CPU 자원을 점유 그것은 완전히 무작위입니다.

그러나, 스레드 1, 스레드 2 실행 순서는 무작위 경우에도,하지만 자체 내에서 논리 스레드 순서에 아직도있다.

방법 2 : Runnable를 구현

우리는 또한 클래스를 생성하고 Runnable를 구현하고 클래스 생성자 스레드 클래스를 전달할 수 있습니다.

// 实现 Runnable 接口
class MyRunnable implements Runnable {
    private String name;

    public MyRunnable(String name) {
        this.name = name;
    }

	// 重写 run() 方法,任务代码放这里
    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println(name + ": " + i);
        }
    }  
}

public class Main {
    public static void main(String[] args) {
    	// 实例化 Runnable 对象,并传递给 Thread 类
        MyRunnable runnable1 = new MyRunnable("线程1");
        MyRunnable runnable2 = new MyRunnable("线程2");
        Thread t1 = new Thread(runnable1);
        Thread t2 = new Thread(runnable2);
        t1.start();
        t2.start();
    }
}

방법 3 : 스레드 풀 (권장)

때문에, 스레드가 비교 권장되는 방법입니다 만들기 위해 스레드 풀을 사용하여 스레드 풀은 새로운 쓰레드를 생성하는 오버 헤드를 저장, 스레드, 스레드와 재사용의 수를 제어 할 수 있습니다.

메서드 호출을 통해 집행, 우리는 스레드 풀을 만들 수 있습니다.

새 작업하는 경우, 스레드 풀 유휴 스레드 사용에 넣어지게된다. 유휴 스레드가없는 경우, 새 작업은 다음 무료 스레드 대기, 대기 큐에 배치됩니다.

인 newFixedThreadPool ()의 실행자 사용 스레드의 지정된 수를 생성하고, 작업을 수행하는 실행 () 메소드를 호출하여.

public class Main {
    public static void main(String[] args) {
    	// 在线程池里预先创建4个线程
        ExecutorService executor = Executors.newFixedThreadPool(4);
        // 调用 execute() 方法传递任务给线程池里的线程
        executor.execute(new MyRunnable("线程1"));
        executor.execute(new MyRunnable("线程2"));
        // 需要显示地关闭线程池,否则线程池将持续等待下一个任务
        executor.shutdown();
    }
}

class MyRunnable implements Runnable {
    private String name;

    public MyRunnable(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println(name + ": " + i);
        }
    }  
}

우리가 명시 적으로 가까운 스레드 풀에 종료 () 메서드를 호출해야하거나 스레드 풀은 다음 작업 대기 상태가 계속됩니다주세요 참고.

집행 인은 스레드 풀의 다른 종류를 제공합니다 :

  • newCachedThreadPool ()
  • newSingleThreadExecutor ()

여기에 세부 사항은 공식 문서를 참조하십시오 설명하지 않습니다

공식 문서의 오라클 자바 스레드 풀

게시 14 개 원래 기사 · 원 찬양 8 · 전망 2196

추천

출처blog.csdn.net/vandavidchou/article/details/103814010