java 다중 스레드 - 스레드 탱크

3845 단어 java 다중 루틴
시스템이 새로운 스레드를 시작하는 데 비용이 비교적 높기 때문에 프로그램에서 대량의 생존 기간이 짧은 스레드를 만들어야 할 때 스레드 탱크를 사용하면 성능을 잘 향상시킬 수 있다.
데이터베이스 연결 탱크와 유사한 것은 스레드 탱크가 시스템이 시작될 때 대량의 빈 스레드를 만드는 것이다.프로그램이 Runnable 대상을 스레드 탱크에 전달하면, 스레드가 그 대상의run 방법을 실행하기 위해 스레드를 시작합니다.런 방법의 실행이 끝난 후에 이 루틴은 죽지 않고 루틴 탱크로 돌아가 빈 상태가 되어 다음 런블 대상을 실행하는run 방법을 기다립니다.
스레드 풀 생성
Java는 스레드 풀을 생성하는 Executors 공장 클래스를 제공합니다. 이 공장 클래스는 다음과 같은 몇 가지 정적 공장 방법으로 스레드 풀을 만들 수 있습니다.
4
  • newCachedThreadPool(): 캐시 기능이 있는 스레드 풀을 만들고 시스템이 필요에 따라 스레드를 만들면 이 스레드는 온라인 스레드 풀에 캐시됩니다

  • 4
  • newFixedThreadPool(int nThreads): 고정된 스레드 수를 가진 다시 사용할 수 있는 스레드 풀을 만듭니다

  • 4
  • newSingleThreadExecutor(): newFixedThreadPool 매개 변수가 1로 전송되는 것과 같은 단일 스레드 풀을 만듭니다

  • 4
  • newScheduledThreadPool(int corePoolsize): 지정된 스레드 수를 가진 스레드 풀을 만듭니다. 지정된 지연 후에 스레드 작업을 수행할 수 있습니다.corePoolsize는 풀에 저장된 스레드의 수를 가리킨다

  • 4
  • new Single Thread Scheduled Executor (): 지정된 지연 후에 작업을 수행할 수 있는 하나의 스레드 풀을 만듭니다

  • 위의 다섯 가지 방법 중 세 가지 방법은 Executor 서비스 대상을 되돌려줍니다. 이 대상은 하나의 루트 풀을 대표하고, Runnable 대상과Callable 대상이 대표하는 루트를 실행할 수 있습니다.다음 두 가지 방법은 ScheduledExecutor 서비스 대상을 되돌려줍니다. 이것은 Executor 서비스의 하위 클래스로 지정된 지연 후에 루틴 작업을 수행할 수 있습니다.
    스레드 작업 수행
    Executor 서비스 클래스는 스레드 작업을 수행하고 결과를 되돌려주는 submit 방법을 제공합니다. (만약 있다면)ScheduledExecutor 서비스는 schedule, scheduleAtFixedRate, scheduleAtFixedDelay 방법을 추가로 제공하여 루틴 작업 실행을 지연시킨다.
    스레드 풀 닫기
    하나의 스레드 탱크를 사용한 후, 스레드 탱크의 shutdown () 방법을 호출해야 합니다. 이 방법은 스레드 탱크의 닫기 시퀀스를 시작하고, shutdown () 방법을 호출한 스레드 탱크는 새로운 작업을 받지 않지만, 이전에 받은 작업을 처리합니다.스레드 탱크의 모든 임무를 수행한 후, 탱크의 모든 스레드는 사망할 것이다.또한 스레드 풀의 shutDownNow () 방법을 호출하여 스레드 풀을 닫을 수 있습니다. 이 방법은 실행 중인 모든 작업을 멈추고 대기 중인 작업을 일시 정지하고 대기 작업 목록을 되돌려줍니다.
    총결산
    스레드 풀을 사용하여 스레드 작업을 수행하려면 다음 단계를 따르십시오.
    4
  • Executor 클래스의 정적 공장 방법을 호출하여 Executor 서비스 대상을 만들고 이 대상은 하나의 스레드 탱크를 대표한다

  • 4
  • Runnable 또는 Callable 인터페이스 구현 클래스를 만드는 실례로 루틴으로 작업을 수행합니다

  • 4
  • Excutor Service의submit 방법을 호출하여Runnable 또는Callable 실례를 제출합니다

  • 4
  • 작업을 제출하지 않으려면 Excutor Service의 shutdown 방법을 사용하여 스레드 풀을 닫습니다
  • import java.util.concurrent.ExecutorService;
    
    import java.util.concurrent.Executors;
    
    
    
    public class ThreadPool {
    
    
    
        public static void main(String[] args){
    
            ExecutorService pool = Executors.newFixedThreadPool(3);
    
            pool.submit(new MyThread() );
    
            pool.submit(new MyThread() );
    
            pool.submit(new MyThread() );
    
            pool.shutdown();
    
        }
    
    }
    
    
    
    
    
    class MyThread implements Runnable{
    
        static int count = 0; 
    
        public void run(){
    
            for(int i=0; i<10; i++){
    
                System.out.println(Thread.currentThread().getName() + "-------" + i + "------" + count++);
    
            }
    
        }
    
    }

    좋은 웹페이지 즐겨찾기