모든 자바 어플리케이션은 Main Thread가 main()메소드를 실행하면서 시작된다.
이러한 Main Thread 안에서 싱글 스레드가 아닌 멀티 스레드 어플리케이션은 필요에 따라 작업 쓰레드를 만들어 병렬로 코드를 실행할 수 있다. 싱글 스레드인 경우 메인이 종료되면 프로세스도 종료되지만, 멀티스레드는 메인스레드가 종료되더라도 실행중인 스레드가 하나라도 있다면 프로세스는 종료되지 않는다.
public class Sample {
public static void main(String args[]){
Thread subThread1 = new CustomThread(); // Thread를 상속한 객체 생성
subThread1.start();
}
}
// Thread 클래스 상속 받음
public class CustomThread extends Thread {
@Override
public void run() {
int sum = 0;
for(int i = 0; i <= 10; i++) {
sum += i;
System.out.println(sum);
}
System.out.println(Thread.currentThread() + "합 : " + sum);
}
}
start() 메소드를 호출하면 작업 스레드는 자신의 run() 메소드를 실행한다.
new를 통해 Thread클래스 객체를 생성 후 start 메소드를 통해 다른 스레드에서 할 작업을 할당하는 방법.
Thread 객체를 생성할 때는 Runnable 인터페이스를 구현한 클래스 객체를 매개변수로 받는다.
public class Sample implements Runnable {
// Runnable 인터페이스 상속 후 메소드 오버라이딩 완성
@Override
public void run() {
int sum = 0;
for(int i = 0; i <= 10; i++) {
sum += i;
System.out.println(sum);
}
System.out.println(Thread.currentThread() + "최종 합 : " + sum);
}
public static void main(String[] args) {
Runnable task = new Sample(); //Runnable은 작업 내용을 가지고 있는 객체이지만 실제 쓰레드가 아님
Thread subThread1 = new Thread(task);
Thread subThread2 = new Thread(task);
subThread1.start();
subThread2.start();
}
}
public class Sample {
public static void main(String[] args) {
Runnable task = new Runnable() {
@Override
public void run() {
int sum = 0;
for(int i = 0; i <= 10; i++) {
sum += i;
System.out.println(sum);
}
System.out.println(Thread.currentThread() + "최종 합 : " + sum);
}
};
Thread subThread1 = new Thread(task);
Thread subThread2 = new Thread(task);
subThread1.start();
subThread2.start();
}
}
public class Sample {
public static void main(String args[]){
Runnable task = ()-> {
int sum = 0;
for (int index = 0; index < 10; index++) {
sum += index;
System.out.println(sum);
}
System.out.println( Thread.currentThread() + "최종 합 : " + sum);
};
Thread subTread1 = new Thread(task);
Thread subTread2 = new Thread(task);
subTread1.start();
subTread2.start();
}
}