WEB/Back-end
멀티스레드, 동기화 (Java)
최새벽
2024. 7. 18. 20:14
멀티 스레드
- 프로세스: 실행 중인 프로그램, 운영체제가 관리
- 멀티 태스킹: 두 가지 이상의 작업을 동시에 처리
- 스레드: 코드의 실행 흐름
- 멀티 태스킹이 멀티 프로세스를 뜻하지는 않음
- 멀티 프로세스 - 서로 독립적이므로 하나의 프로세스가 종료되더라도 다른 프로세스에 영향을 끼치지는 않는다
- 멀티 스레드 - 하나의 스레드가 종료되면 프로세스가 종료되므로 다른 스레드에 영향을 끼치기도 함
멀티스레드 만들기
- Runnable() 인터페이스 구현
- 익명 구현 객체 만들기
import java.awt.Toolkit;
public class BeepPrintExample2 {
public static void main(String[] args) {
// 익명 구현 객체 활용, 구현 클래스 따로 만들어서 사용할 수도 있음
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++) {
toolkit.beep();
try { Thread.sleep(500);} catch (Exception e) {}
}
}
});
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("띵");
try {
Thread.sleep(500);
} catch (Exception e) {}
}
}
}
- Thread() 클래스 상속
- 익명 자식 객체 만들기
public class BeepPrintExample {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++) {
toolkit.beep();
try {Thread.sleep(500);} catch (Exception e) {}
}
}
};
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("띵");
try {
Thread.sleep(500);
} catch (Exception e) {}
}
}
}
동기화
synchronized
: 동기- 메서드 or 블록에 해당 키워드 붙이면 동기적이 됨
- 동시 실행 불가. 선점한 프로세스 실행이 끝난 후 다른 프로세스 실행
asynchronized
: 비동기- AJAX : Asynchronized JavaScript And Xml