멀티태스킹 - 두가지 이상의 작업을 동시에 하는 것

멀티스레딩 - 하나의 프로세스 안에 여러개의 스레드가 동시에 작업을 수행하는것

**참고 ; 실제로 동시에 처리될 수 있는 프로세스의 개수는 CPU의 코어개수와 동일하다. 다만, 이보다 많은 개수를 처리할 경우 짧은시간보다 여러 프로세스를 번갈아가며 처리하는 방식을 통해 동시에 동작하는 것 처럼 보일 뿐이다.

스레드 구현

자바에서 스레드 구현방법은 다음 2가지이다.

  1. Runnable인터페이스 구현
public class MyThread implements Runnable {
    @Override
    public void run() {
        // 수행 코드
    }
}
  1. Thread클래스 상속
public class MyThread extends Thread {
    @Override
    public void run() {
        // 수행 코드
    }
}

스레드 생성

Runnable인터페이스를 구현한 경우에는 Thread생성자에 해당 클래스를 인스턴스화 하여 인자로 넘겨주어야한다.

public static void main(String[] args) {
    Runnable r = new MyThread();
    Thread t = new Thread(r, "mythread");
}

Thread클래스를 상속받은 경우 상속받은 클래스 자체를 스레드로 사용할 수 있다.

public class ThreadTest implements Runnable {
    public ThreadTest() {}
    
    public ThreadTest(String name){
        Thread t = new Thread(this, name);
        t.start();
    }
    
    @Override
    public void run() {
        for(int i = 0; i <= 50; i++) {
            System.out.print(i + ":" + Thread.currentThread().getName() + " ");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

스레드 실행

스레드의 실행은 run() 호출이 아닌 start() 호출로 해야한다.

Why?

우리는 분명 run() 메소드를 정의했는데, 실제 스레드 작업을 시키려면 start()로 작업해야 한다고 한다.