본문 바로가기
java

Thread 더 좋은 생성방법

by improve 2024. 2. 21.

● Thread pool 기반 

●singleThreadExecutor

package org.example;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main4 {
    public static void main(String[] args) {
        ExecutorService es = Executors.newSingleThreadExecutor();
        es.submit(() -> {
            int n1 = 10;
            int n2 = 20;
            System.out.println(Thread.currentThread().getName()+" "+(n1+n2));
        } );
        System.out.println("main thread 종료");
        es.shutdown();
    }
}

 

singleThreadExecutor 는 thread를 한개씩 진행하고 끝나야 다음 thread를 진행한다.

 

●FixedThreadPool

package org.example;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main5 {
    public static void main(String[] args) {
        Runnable ran1 = () -> {
            for (int i = 0; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName()+"A쓰레드" + i);
            }
        };
        Runnable ran2 = () -> {
            for (int i = 0; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName()+"B쓰레드"+i);
            }
        };

        ExecutorService es = Executors.newFixedThreadPool(2);
        es.submit(ran1);
        es.submit(ran2);
        es.submit(() -> {
            for (int i = 0; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName()+"C쓰레드");
            }
        } );
        es.shutdown();
    }
}

 

 

2개의 쓰레드를 사용한다.

 

 

●Callable & Future

 

package org.example;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main6 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable<Integer> task = () -> {
            int sum = 0;
            for (int i = 0; i < 10; i++) {
                sum += i;
            }
            return sum;
        };
        ExecutorService es = Executors.newSingleThreadExecutor();
        int sum = es.submit(task).get();

        System.out.println("sum="+sum);
        es.shutdown();
    }
}

 

 

이렇게 제네릭을 사용해서 callable 을 이용해 sum값을 구할 수 있다.

 

 

'java' 카테고리의 다른 글

jar -> war 로 tomcat 을 이용  (0) 2024.03.28
GitHub sourceTree Token  (0) 2024.03.21
Thread 이해 와 생성  (0) 2024.02.21
파일 시스템(NIO)  (0) 2024.02.20
문자 스트림  (0) 2024.02.19