-
[java]쓰레드(Thread)와 RunnableDevelopment/JAVA 2017. 2. 8. 23:56반응형
쓰레드(Thread)를 잘 모르는 분들을 위해 쓰레드가 무엇인지 짚고 넘어가도록 하겠습니다.
Thread는 하나의 프로세스(Process) 내부에서 작업을 처리하는 녀석입니다.
프로세스는 하나의 프로그램으로 보시면 되겠습니다.
(ex : 프로세스는 엑셀이고 쓰레드는 엑셀 내부에서 함수처리 등 작업을 담당하는 녀석이죠)
그래서 쓰레드보다 프로세스가 더 큰 개념입니다. (Thread < Process)
'쓰레드'는 조립 PC를 구매해봤던 사람이라면 한 번쯤은 들어보셨을거에요 ㅎㅎ
요즘 CPU는 쓰레드가 8, 16개 등 다양하게 있습니다.
(이미지출처 : 다나와)
그럼 지금부터는 코드를 통해 쓰레드 사용법을 알아보도록 하겠습니다.
자바 혹은 C 프로그래밍을 하다보면 메인 메소드를 많이 보셨을겁니다.
자바는 'public static void main(String[] args)' C는 'void main()' 이렇게요!
주로 코드를 실행할 때 Main() 메소드(혹은 함수)에서 함수나 클래스를 호출하여 사용하게 됩니다.
public class main {
public static void main(String[] args) {
System.out.println("메인 시작!");
}
}
이렇게요~여기서 쓰레드를 사용하게 되면 Main() 뿐만 아니라 쓰레드에서도 동시다발적으로 함수를 호출하거나 실행할 수 있습니다.class A extends Thread{public void run(){System.out.println("A Thread!");}}Thread를 상속받아 run()함수에 소스를 입력하면 끝입니다! 여기서 run()이 바로 main()과 같은 역할을 하는 것이죠!A a = new A();a.run(); //Method 호출여기서 A클래스를 불러오면 쓰레드가 실행될까요??아닙니다. 이것은 [쓰레드 실행]이 아닌 [메소드 호출]입니다.그렇다면 쓰레드를 실행하려면 어떻게 해야할까요??a.start()를 해주면 실행이 됩니다.단순히 run()을 실행해보면 큰 차이는 없습니다. 하지만 다음과 같이 실행해보면 그 차이를 확연히 알 수 있을겁니다.[소스]class A extends Thread{public void run(){System.out.println("A Thread!");}}public class main {public static void main(String[] args) {System.out.println("메인 시작!");A a = new A();a.run(); //Method 호출a.start(); //Thread 호출for(int i = 1; i<=100; i++){System.out.print(i);if(i%10 == 0 ) System.out.print("\n");else System.out.print("\t");}}}a.run(); 실행했을 경우
a.start(); 실행했을 경우
어떤가요? 차이가 확실이 나죠? start()를 했을 때에는 순차적으로 실행되는 것이 아니라 main()과 같이 작동한다는 것을 알 수가 있습니다.여기서 의문을 가지실 수 있는 것은 자바에서는 다중 상속이 안되는데 어떻게 하는가 입니다.바로 Runnable라는 인터페이스를 사용하는 것인데요!쓰레드를 새로 생성한 뒤 다음과 같이 입력하면 됩니다^^[소스]class B extends Object implements Runnable{public void run(){System.out.println("B Thread!");}}public class main {public static void main(String[] args) {System.out.println("메인 시작!");B b = new B();Thread th = new Thread(b);th.start();for(int i = 1; i<=100; i++){System.out.print(i);if(i%10 == 0 ) System.out.print("\n");else System.out.print("\t");}}}그러면 A 클래스처럼 B클래스의 쓰레드도 잘 작동하는 것을 볼 수가 있습니다^^
반응형'Development > JAVA' 카테고리의 다른 글
[java]예제-알파벳을 순서대로 저장한 뒤 10개씩 출력하는 프로그램 (0) 2016.05.21 [java]예제-입력 받은 값을 자릿수 별로 나누어 합계 구하기 (0) 2016.05.21 [java]예제-사용자로부터 가격을 입력받아 최소한의 동전 필요갯수 구하기 (0) 2016.05.20 [java]예제-사용자로부터 초를 입력받아 시,분,초로 나타내는 프로그램 (1) 2016.05.20