요새 OS는 도스처럼 한번에 한 프로그램만 실행할 수 있는 것이 아니다. 윈도우, 리눅스는 한번에 여러 프로그램을 실행시킬 수 있는 멀티테스킹이 가능한 OS다. 또한, 프로그램안에서도 쓰레드를 나누어서 작업을 따로따로 실행할 수 있게 해준다.


이의 장점은 매우 크다.




예를 들어서 예전에 카카오톡PC버전은 쓰레드를 나누지 않고 단일로 해놓아서, 채팅 기록을 다운받으려하면 다운 받는 동안 채팅이 먹통이 되버린다.

(현재는 다중 쓰레드로 만들어놔서 이상이 생기진 않는다.)


이와 같이 별도로 실행시키기 충분하다면 여러 쓰레드로 나누어서 작업을 진행하는 것이 유리하다.




쓰레드를 나누어서 작업하게 되면 속도가 빨라질 수도 있고 아닐 수가 있는데.

이는 CPU에 따라서 다르다. 만약 싱글코어(요새는 거의 없다...)에서는 쓰레드를 나누어서 작업을 시키게 되면 전체 작업시간은 늘어난다.

왜냐하면, 작업을 동시에 진행하면서 CPU가 작업을 스케줄링하는 과정자체에서 시간이 더 소모되기 때문이다.


하지만 멀티코어에서는 코어마다 따로 작업이 되기 떄문에. 작업 시간이 줄어든다.


뭐 자세한 사항은 솔직히 잘 설명되어있는 책을 사서 보는게 좋다.




뭐 시간이 어떻고 저렇고 멀티 쓰레드 프로그래밍을 사용할 곳에 사용하는 것은 충분한 이점이니. 신경 크게 쓰지 말고 사용해도 좋을 듯 싶다.




자바에서 쓰레드를 이용하는 방법에 대해서 간단히 다뤄보고자 한다.




1. 상속을 통한 쓰레드 프로그래밍


Thread를 상속해서 하는 방법이다. 이 경우에는 상속의 특성상 다른 부모 클래스를 가질 수가 없다.


간단하게 이용할 때. 좋은 방법이다.



class TestThread extends Thread

{

public static void main(String[] args)

{

TestThread testThread = new TestThread();

testThread.start();

}


public void run()

{

for (int i = 1; i <= 10; i++)

{

System.out.println(i);

}

}

}


위와 같은 방식이다.


인스턴스를 만든 후 start 메서드를 호출하면, 쓰레드 대기 목록에 올라가고 순서가 되면 실행이 된다.



2. 구현을 통한 쓰레드 프로그래밍


인터페이스를 구현을 통해서 쓰레드 프로그래밍을 하게 되므로, 상속을 사용할 수 있게 된다.



class Main

{

public static void main(String[] args)

{

Thread testThread = new Thread(new TestThread());

testThread.start();

}

}


class TestThread implements Runnable

{

public void run()

{

for (int i = 1; i <= 10; i++)

{

System.out.println(i);

}

}

}



다음과 같은 형태이다.





참고로 한번 start()를 호출할 시 다시 재사용할 수 없다. 재사용하고 싶다면 새로 인스턴스를 만들어서 그것을 실행하여야 한다.


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

[Java] 난수(Random)  (0) 2017.02.01
[Java] 익명 클래스 관련 문법 유형들  (0) 2016.08.11
[Java] 구구단 퀴즈  (0) 2016.07.09
[Java] UDP 통신 예제  (0) 2016.07.09