멀티태스킹 - 두가지 이상의 작업을 동시에 하는 것
멀티스레딩 - 하나의 프로세스 안에 여러개의 스레드가 동시에 작업을 수행하는것
**참고 ; 실제로 동시에 처리될 수 있는 프로세스의 개수는 CPU의 코어개수와 동일하다. 다만, 이보다 많은 개수를 처리할 경우 짧은시간보다 여러 프로세스를 번갈아가며 처리하는 방식을 통해 동시에 동작하는 것 처럼 보일 뿐이다.
자바에서 스레드 구현방법은 다음 2가지이다.
public class MyThread implements Runnable {
@Override
public void run() {
// 수행 코드
}
}
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()로 작업해야 한다고 한다.