최근에 나는 코드 최적화를 할 때 Java 멀티 스레딩의 사용을 배우고 연구 한 다음 초보자의 통찰력을 읽은 후 요약했습니다.
1. 스레드 클래스를 상속하여 멀티 스레딩을 구현하십시오
스레드 클래스를 상속하는 메소드는 멀티 스레드 구현 메소드로 나열되지만 스레드는 본질적으로 실행 가능한 인터페이스의 인스턴스이며, 이는 스레드의 인스턴스를 나타내며 스레드를 시작하는 유일한 방법은 스레드 클래스의 시작 () 인스턴스 메소드를 통과하는 것입니다. start () 메소드는 새 스레드를 시작하고 run () 메소드를 실행하는 기본 메소드입니다. 이 방법은 멀티 스레딩을 구현하는 것이 매우 간단합니다. 자신의 클래스를 통해 스레드를 직접 확장하고 run () 메소드를 다시 작성하여 새 스레드를 시작하고 정의하는 run () 메소드를 실행할 수 있습니다. 예를 들어:
public class mythread는 스레드 {public void run () {system.out.println ( "mythread.run ()"); }} 다음과 같이 올바른 위치에서 스레드를 시작하십시오.
Mythread Mythread1 = new Mythread (); Mythread Mythread2 = new Mythread (); Mythread1.start (); mythread2.start ();
2. 멀티 스레딩을 구현하려면 런닝 가능한 인터페이스를 구현하십시오
수업이 이미 다른 클래스를 확장하면 스레드를 직접 확장 할 수 없습니다. 현재 다음과 같이 런닝 가능한 인터페이스를 구현해야합니다.
공개 클래스 Mythread는 runnable {public void run () {system.out.println ( "mythread.run ()"); }} 신화를 시작하려면 먼저 스레드를 인스턴스화하고 자신의 신화 사례를 전달해야합니다.
Mythread Mythread = New Mythread (); 스레드 스레드 = 새 스레드 (신화); thread.start ();
실제로, 실행 가능한 대상 매개 변수가 스레드로 전달되면 run () 스레드 메소드는 target.run ()을 호출합니다. JDK 소스 코드를 참조하십시오.
public void run () {if (target! = null) {target.run (); }} 3. ExecutorService, Callable 및 Future를 사용하여 반환 결과로 멀티 스레딩을 달성하십시오.
ExecutorService, Callable 및 Future Objects는 실제로 Executor 프레임 워크에서 기능적 클래스입니다. 이것은 프레임 워크에 대한 매우 자세한 설명입니다. 결과를 반환하는 스레드는 JDK1.5에 도입 된 새로운 기능입니다. 실제로 매우 실용적입니다. 이 기능을 사용하면 리턴 값을 얻기 위해 많은 어려움을 겪을 필요가 없으며, 구현 되더라도 허점으로 가득 차있을 수 있습니다.
값을 반환 할 수있는 작업은 호출 가능한 인터페이스를 구현해야하며 마찬가지로 값을 반환하지 않는 작업에는 실행 가능한 인터페이스가 있어야합니다. 호출 가능한 작업을 실행 한 후 미래의 개체를 얻을 수 있습니다. 호출 가능한 작업에 의해 객체를 반환하기 위해 객체에 전화를 걸어야합니다. 스레드 풀 인터페이스 ExecutorService와 결합하여 리턴 결과와 함께 전설적인 멀티 스레딩을 실현할 수 있습니다. 아래는 결과가 반환 된 완전한 다중 스레드 테스트 예제입니다. JDK1.5에 따라 확인한 경우 직접 사용할 수 있습니다. 코드는 다음과 같습니다.
java.util.concurrent.*; import java.util.date; Java.util.list 가져 오기; java.util.arraylist 가져 오기; / *** 반환 값이있는 스레드*/ @suppresswarnings ( "선택 취소") 공개 클래스 테스트 {public static void main (String [] args)은 executionException, InterruptedException { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Create a thread pool ExecutorService pool executor.newfixedThreadPool (taskSize); System.out.println ( ">>>" + f.get (). toString ()); // (Future F : List)에 대한 모든 동시 작업의 실행 결과를 가져옵니다. {// 미래의 객체에서 작업의 반환 값을 가져 와서 콘솔 시스템으로 출력하십시오. } date date2 = 새 날짜 (); System.out.println("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mycallable (tasknum) {tasknum} public object ()는 {system.out.println을 던졌습니다. System.out.println ( ">>>" + tasknum + "task ternation"); 코드 설명 :
위의 코드에서 Executors 클래스는 스레드 풀을 생성하기위한 일련의 공장 방법을 제공하며, 반환 된 스레드 풀은 모두 ExecutorService 인터페이스를 구현합니다.
공개 정적 ExecutorService NewFixedThreadpool (int nthreads)
고정 된 수의 스레드가있는 스레드 풀을 만듭니다.
public static executorService newCachedThreadPool ()
캐시 가능한 스레드 풀을 만듭니다. 호출 Execute는 이전에 구성된 스레드를 재사용합니다 (스레드를 사용할 수있는 경우). 기존 스레드를 사용할 수없는 경우 새 스레드를 작성하여 풀에 추가하십시오. 60 초 동안 사용되지 않은 캐시에서 스레드를 종료하고 제거하십시오.
public static executorService NewsingLethreadExecutor ()
단일 스레드 집행자를 만듭니다.
공개 정적 ScheduleDexecutorService NewsCheduledthreadpool (int corepoolsize)
타이머 클래스 대신 대부분의 경우 사용할 수있는 시간 및 정기적 인 작업 실행을 지원하는 스레드 풀을 만듭니다.
ExecutorEservice는 제출 () 메소드를 제공하고, 호출 가능 또는 런 가능성을 전달하고, 미래를 반환합니다. Executor Backag