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 중국어 웹사이트의 기타 관련 기사를 참조하세요!