java 다중 스레드 실현 방법 총결

2959 단어 java다중 스레드
java 다중 스레드를 실현하는 세 가지 방법
자바에서 세 가지 방법으로 다중 스레드를 실현할 수 있다.첫 번째 방법: Thread 클래스를 계승하고run 함수를 다시 씁니다.두 번째 방법: Runnable 인터페이스를 실현하고run 함수를 다시 쓴다.세 번째 방법: Callable 인터페이스를 실현하고call 함수를 다시 쓴다.이 글은 실례를 통해 이 세 가지 방법이 어떻게 다선정을 실현하는지 설명할 것이다.필요한 건 참고하셔도 돼요.
(1) Thread 클래스를 상속하고 run 함수를 다시 씁니다.

class xx extends Thread{
     public void run(){
      Thread.sleep(1000)  // 1000 ,sleep Block , 
    }}
라인 켜기:
대상start ()//시작 루틴,run 함수 실행
(2) Runnable 인터페이스 구현, 코드는 다음과 같다.

class MyThread implements Runnable {
  
  private String name;
  
  public MyThread(String name) {
    super();
    this.name = name;
  }
  
  @Override
  public void run() {
    for(int i = 0 ; i < 200; i++) {
      System.out.println("Thread"+name+"--->"+i);
    }  
  }
}

public class ThreadDemo {

  public static void main(String[] args) {
    MyThread a = new MyThread("a");
    MyThread b = new MyThread("b");
    MyThread c = new MyThread("c");
    new Thread(a).start();
    new Thread(b).start();
    new Thread(c).start();
  }
}

(3) Callable 인터페이스 구현, call 함수 다시 쓰기
Callable은 Runnable와 유사한 인터페이스입니다. Callable 인터페이스를 실현하는 클래스와 Runnable를 실현하는 클래스는 모두 다른 라인에서 수행할 수 있는 작업입니다.
Callable과 Runnable의 차이점은 다음과 같습니다.
  • Callable은 call(), Runnable는 run()을 지정합니다.
  • Callable의 작업이 실행되면 값을 되돌릴 수 있지만, Runnable의 작업은 값을 되돌릴 수 없습니다.
  • call() 방법은 이상을 던질 수 있으나run() 방법은 이상을 던질 수 없습니다.
  • Callable 작업을 실행하면 Future 대상을 얻을 수 있으며, Future는 비동기적인 계산 결과를 나타낸다.그것은 계산이 완성되었는지 확인하는 방법을 제공하여 계산이 완성되기를 기다리고 계산된 결과를 검색한다.Future 객체를 통해 작업 수행 상황을 파악하고 작업 수행을 취소하며 작업 수행 결과를 얻을 수 있습니다.
  • Java Callable 코드 예:
    
    class TaskWithResult implements Callable<String> {
     private int id;
    
     public TaskWithResult(int id) {
     this.id = id;
     }
    
     @Override
     public String call() throws Exception {
     return "result of TaskWithResult " + id;
     }
    }
    
    public class CallableTest {
     public static void main(String[] args) throws InterruptedException,
      ExecutionException {
     ExecutorService exec = Executors.newCachedThreadPool();
     ArrayList<Future<String>> results = new ArrayList<Future<String>>(); //Future  Executor 
     for (int i = 0; i < 10; i++) {
      results.add(exec.submit(new TaskWithResult(i)));
     }
     for (Future<String> fs : results) {
      if (fs.isDone()) {
      System.out.println(fs.get());
      } else {
      System.out.println("Future result is not yet complete");
      }
     }
     exec.shutdown();
     }
    }
     
    
    
    읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기