>  기사  >  Java  >  Java 멀티스레딩을 구현하는 방법

Java 멀티스레딩을 구현하는 방법

尚
원래의
2019-12-04 11:06:593693검색

Java 멀티스레딩을 구현하는 방법

Java에서 멀티스레딩을 구현하는 방법: (권장: java 비디오 튜토리얼)

방법 1: Thread 클래스 상속

1 Thread 클래스에서 상속되는 하위 클래스를 만듭니다

2. 반복 Thread 클래스에 run()을 작성합니다. run()

3에서 이 스레드가 수행할 작업을 선언합니다. 이 객체의 start()를 호출합니다. 스레드 ② 현재 스레드의 run() 메서드를 호출합니다

방법 2: Runnable 인터페이스 구현 방법

1 Runnable 인터페이스를 구현하는 클래스를 만듭니다

2. : run(): 생성된 스레드는 이 메소드에서 선언됩니다

3. Runnable 인터페이스 구현 클래스의 객체를 생성합니다

4. 이 객체를 Thread 클래스의 생성자에 매개변수로 전달하고 Thread 클래스의 객체

5. Thread 클래스 start() 호출: ① 스레드 시작 ② 스레드의 run() 호출 ---> Runnable 인터페이스 구현 클래스의 run() 호출

다음 두 가지 메소드는 jdk1.5의 새로운 기능입니다!

방법 3: Callable 인터페이스 구현

지침:

1. Runnable을 사용하는 것과 비교할 때 Callable이 더 강력합니다

2. run() 메서드와 비교하여 구현된 call() 메서드는 값을 반환할 수 있습니다.

3. 메소드는 예외를 발생시킬 수 있습니다.

4. 일반 반환 값을 지원합니다. ​​

5. 반환 결과를 가져오는 등 FutureTask 클래스를 사용해야 합니다.

Future 인터페이스는 특정 항목의 실행 결과를 취소하고 쿼리할 수 있습니다. 실행 가능 및 호출 가능 작업 완료, 결과 얻기 등 FutureTask는 Future 인터페이스의 유일한 구현 클래스입니다. FutureTask는 Runnable 및 Future 인터페이스도 구현합니다. Runnable로 스레드에 의해 실행될 수 있으며 Callable

의 반환 값을 얻기 위해 Future로 사용될 수도 있습니다. 방법 4: 스레드 풀 사용

지침:

미리 여러 ​​스레드를 생성하세요. 스레드 풀에 넣고 사용할 때 직접 얻고, 사용 후에는 다시 풀에 넣습니다. 잦은 생성과 소멸을 피하고 재사용을 실현할 수 있습니다. 생활 속의 대중교통과 비슷합니다.

이점:

1. 응답 속도 향상(새 스레드 생성 시간 단축)

2. 리소스 소비 감소(스레드 풀에서 스레드 재사용, 매번 생성할 필요 없음)

3.

예:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadPoolExecutor;

//方式一
class ThreadTest extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式二
class RunnableTest implements Runnable {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式三
class CallableTest implements Callable<Integer> {

	@Override
	public Integer call() throws Exception {
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
			sum += i;
		}
		return sum;
	}

}

// 方式四
class ThreadPool implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}

}

public class Test {
	public static void main(String[] args) {
		// 继承Thread
		ThreadTest thread = new ThreadTest();
		thread.setName("方式一");
		thread.start();

		// 实现Runnable
		RunnableTest runnableTest = new RunnableTest();
		Thread thread2 = new Thread(runnableTest, "方式二");
		thread2.start();

		// 实现Callable<> 有返回值
		CallableTest callableTest = new CallableTest();
		FutureTask<Integer> futureTask = new FutureTask<>(callableTest);
		new Thread(futureTask, "方式三").start();
		// 返回值
		try {
			Integer integer = futureTask.get();
			System.out.println("返回值(sum):" + integer);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 线程池
		ExecutorService pool = Executors.newFixedThreadPool(10);

		ThreadPoolExecutor executor = (ThreadPoolExecutor) pool;
		/*
		 * 可以做一些操作:
		 * corePoolSize:核心池的大小 
		 * maximumPoolSize:最大线程数
		 * keepAliveTime:线程没任务时最多保持多长时间后会终止
		 */
		executor.setCorePoolSize(5);

		// 开启线程
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());

	}

}

더 많은 Java 지식을 알고 싶다면

java 기본 튜토리얼

칼럼을 주목해 주세요.

위 내용은 Java 멀티스레딩을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.