Thread 클래스를 상속받는 방법
쓰레드의 실행은 Thread.start() 메소드를 실행시킴으로써 할 수 있고, 이 때 쓰레드 클래스의 run()이 호출된다. 즉, run() 오버라이딩 메소드안에 수행할 작업을 구현해야한다.
public class ThreadTest extends Thread{
int arg;
public ThreadTest(int arg) {
this.arg=arg;
}
public void run() {//Thread.start()시 실행되는 함수,
System.out.println("Thread Start: "+this.arg);
try {
Thread.sleep(1000);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("Thread end :" + this.arg);
}
public static void main(String[] args) {
for(int i=0; i<10; i++)
{
ThreadTest th=new ThreadTest(i+1);
th.start();
}
System.out.println("main end");
}
}
Runnable 인터페이스를 구현하는 방법
Thread 클래스와 동일하게 run() 을 오버라이딩한다.
쓰레드의 실행은 쓰레드 인스턴스에 구현 클래스를 인자로 넣음으로써 할 수 있다.
public class ThreadTest implements Runnable{
int arg;
public ThreadTest(int arg) {
this.arg=arg;
}
public void run() {//Thread.start()시 실행되는 함수,
System.out.println("Thread Start: "+this.arg);
try {
Thread.sleep(1000);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("Thread end :" + this.arg);
}
public static void main(String[] args) {
for(int i=0; i<10; i++)
{
ThreadTest th=new ThreadTest(i+1);
new Thread(th).start();
}
System.out.println("main end");
}
}
위의 코드를 실행해보면 main메소드가 먼저 끝나는 것을 확인할 수 있다.
메인 메소드의 종료 메시지가 출력되는 것을, 쓰레드가 모두 종료된 이후로 조정하고 싶다면 Thread.join() 을 이용한다.
레퍼런스에 따르면
join(): Waits for this thread to die.
어마무시하군..!
join 메소드 활용 예제
import java.util.ArrayList;
public class ThreadTest implements Runnable{
int arg;
public ThreadTest(int arg) {
this.arg=arg;
}
public void run() {//Thread.start()시 실행되는 함수,
System.out.println("Thread Start: "+this.arg);
try {
Thread.sleep(1000);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("Thread end :" + this.arg);
}
public static void main(String[] args) throws InterruptedException {
ArrayList<Thread> threads = new ArrayList<Thread>();
for(int i=0; i<10; i++)
{
Thread th=new Thread(new ThreadTest(i+1));
threads.add(th);
th.start();
}
for(int i=0; i<threads.size(); i++) {
Thread th=threads.get(i);
th.join();
}
System.out.println("main end");
}
}
'이론 > 알고리즘&자료구조&Java' 카테고리의 다른 글
[Java] 자바의 직렬화란?(Serializable) (0) | 2018.11.12 |
---|---|
[Java8] 자바의 람다 표현식 - 자바로도 함수형 프로그래밍을 할 수 있다 (0) | 2018.11.06 |
[LocalDate - JAVA 8] LocalDate 정리 (0) | 2018.09.11 |
[백준 알고리즘 - 1806] 부분합 + StringTokenizer 정리 - java (0) | 2018.09.04 |
[JAVA] String/StringBuffer/StringBuilder (0) | 2018.08.27 |