프로그래밍/JAVA

프로세스와 쓰레드(이해와 구현)

Baesj 2021. 9. 19. 18:18

프로세스

 - 프로세스는 실행중인 프로그램으로 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 항당받아 프로세스가 된다.

 

쓰레드

 - 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다.

 

멀티쓰레딩 장점과 단점

 - 장점

  1. cpu 사용률 향상

  2. 자원을 효율적으로 사용

  3. 사용자에 대한 응답성 향상

  4. 작업이 분리되어 코드가 간결

 - 단점

  1. 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화 문제가 발생할 수 있음

  2. 교착상태(두 쓰레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원을 사용하려고 기다리느라 진행이 멈춰있는 상태)가 발생할 수 있음

 

쓰레드 구현 방법

 1. Thread 클래스 상속

 2. Runnable 인터페이스 구현

Thread 클래스는 상속받으면 다른 클래스를 상속받을 수 없으므로 Runnable 인터페이스를 구현하는것이 일반적이고, 재사용성이 높고 코드의 일관성을 유지할 수 있다.

 

class ThreadTest1 extends Thread {
    public void run() {
        for (int i = 1; i <= 10000000; i++) {
//            System.out.println(getName() + " " + i);
        }
    }
}
class ThreadTest2 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 10000000; i++) {
//            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }
}
public static void main(String[] args) {
        ThreadTest1 threadTest1 = new ThreadTest1();
        ThreadTest2 r = new ThreadTest2();
        Thread threadTest2 = new Thread(r);

        long start = System.currentTimeMillis();
        threadTest1.start();
        threadTest2.start();
        System.out.println("멀티쓰레드 결과 = " + (System.currentTimeMillis() - start));

        long start2 = System.currentTimeMillis();
        for (int i = 1; i <= 10000000; i++) {
        }
        for (int i = 1; i <= 10000000; i++) {
        }
        System.out.println("싱글 결과 = " + (System.currentTimeMillis() - start2));
    }

결과

'프로그래밍 > JAVA' 카테고리의 다른 글

쓰레드 상태 및 과정  (0) 2021.09.24
쓰레드 IO블락킹과 데몬쓰레드  (0) 2021.09.23
JAVA char <-> String 변환  (0) 2021.08.25
HashMap  (0) 2021.08.19
ArrayList와 LinkedList  (0) 2021.08.06