스레드(thread)
프로세스 내에서 실제로 작업을 수행하는 주체를 의미
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행
두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.
ex)while문을 동시에 여러개 사용하고 싶을 때
스레드(thread)를 실행하는 방법
1.Thread 클래스를 상속받는 방법
1:1(일대일), 하나의 객체의 하나의 스레드가 붙는 것
ex)객체를 만들었는데 다 따로따로 움직여야 할 경우
public class Loop1 extends Thread{
//내가 실행하고 싶은 루프를 런을 오버라이드 하여 돌려주자
@Override
public void run() {
execute();
}
public void execute(){
for (int i = 0; i < 1000; i++) {
System.out.println(Thread.currentThread().getName()+": "+ i+"::::::"+Loop1.this);
}
}
}
2.Runnable 인터페이스를 구현하는 방법
1:N(일대다), 한개의 객체에 여러 스레드가 붙는 것
ex)웹, 서블릿
public class Ex2 implements Runnable{
private String name;
//객체는 하나인데 쓰레드는 여러개
public void execute(){
this.name = Thread.currentThread().getName();
for (int i = 0; i < 100; i++) {
System.out.println(i+": "+ name);
}
}
@Override
public void run() {
execute();
}
public static void main(String[] args) throws Exception{
Ex2 obj = new Ex2();
new Thread(obj).start();
new Thread(obj).start();
new Thread(obj).start();
new Thread(obj).start();
}
}
스레드 동기화 문제
멀티 - 스레드는 잘 사용하면 좋은 성능을 내지만, 스데르 간 동기화 문제를 해결해야 함
동기화 문제는 heap에서 발생
스레드 동기화 문제를 해결하기 위해 thread - safe를 해야하는데 사용하는 키워드는 Synchronized