본문 바로가기

JAVA/기본다지기

JAVA 18일차 필기

스레드(thread)


package com.javalesson.ch19thread;


import java.lang.Thread;

//java.lang 패키지 -> Object, 기본데이터타입

//->java를 구현하기 위한 가장 중요한 도구들을 모아 놓은 패키지

//Thread는 아주아주 중요한 클래스 -> main() 1thread를 가지기 위해


public class L01Thread extends Thread{

int num;

public L01Thread(int num){

this.num=num;

}

public void run() {//run() 실행할 코드를 작성하면 start() 메소드로 스레드를 생성한다

System.out.println(num+"thread run");

}

public static void main(String[] args){

new L01Thread(1).start();

new L01Thread(2).start();

new L01Thread(3).start();

new L01Thread(4).start();

new L01Thread(5).start();

new L01Thread(6).start();

new L01Thread(7).start();

new L01Thread(8).start();

new L01Thread(9).start();

new L01Thread(10).start();

//main 안에 10개의 thread가 생성됨

//10개의 실행 단위가 동시에 실행됨

//출력이 random하게 나온다

}

}


스레드


인터넷을 사용하면서 과부하나 병목현상이 발생하는 원인 중의 하나는 대부분의 FTP와 같은 서버들이 새로운 연결을 위해 새로운 프로세스를 만드는 방법을 사용했기 때문이었다.


예를 들어, 동시에 100명이 접속할 경우 이를 처리하기 위해 100개의 추가적인 프로세스를 만들었다. 프로세스는 운영체제에서 꽤 무거운 축에 속하기 때문에 너무 많이 생성하면 서버에 과부하를 발생시킨다.


이 문제를 해결하기 위한 첫 번째 방법은 새로운 프로세스를 생성하는 대신 재사용 하는 방법이 있다.


두 번째 방법이 바로 프로세스 대신에 스레드를 사용하여 처리하는 것이다. 각각의 독립적이 프로세스는 자신의 메모리 영역을 할당받지만 스레드는 프로세스의 메모리를 공유하기 때문에 리소스에 대한 부담이 없다. 프로세스 대신 스레드를 사용함으로써 서버의 성능을 높일 수 있는 세 가지 요소가 있다.


이 요소들을 재사용 가능한 스레드 풀(thread pool)과 결합함으로써 동일한 하드웨어와 네트워크 환경에서 9배나 빠르게 실행시킬 수 있다. 많은 스레드도 결국 하나의 프로세스 안에서 실행되기 때문에 서버 하드웨어에 미치는 영향은 상대적으로 적다.


대부분의 JVM은 대량 4000개에서 2만개 정도의 스레드가 동시에 실행될 경우 메모리가 고갈되어 뻗어버린다.


그러나 각 연결에 대해 새로운 스레드를 생성하는 대신 스레드 풀을 재사용함으로써, 수백개 이하의 스레드를 사용하여 분당 수천 개의 연결을 처리할 수 있다.


스레드가 리소스를 공유하여 사용할 때에는 데드락(deadlock)이 발생하지 않도록 주의해야 한다. 

'JAVA > 기본다지기' 카테고리의 다른 글

JAVA 20일차 필기  (1) 2016.09.05
JAVA 19일차 필기  (1) 2016.09.01
JAVA 17일차 필기  (1) 2016.08.30
JAVA 16일차 필기  (1) 2016.08.29
[JAVA] 재미로 만든 로또번호 추첨기  (3) 2016.08.29