WEB/Back-end

멀티스레드, 동기화 (Java)

최새벽 2024. 7. 18. 20:14

멀티 스레드

  • 프로세스: 실행 중인 프로그램, 운영체제가 관리
  • 멀티 태스킹: 두 가지 이상의 작업을 동시에 처리
  • 스레드: 코드의 실행 흐름
  • 멀티 태스킹이 멀티 프로세스를 뜻하지는 않음
  • 멀티 프로세스 - 서로 독립적이므로 하나의 프로세스가 종료되더라도 다른 프로세스에 영향을 끼치지는 않는다
  • 멀티 스레드 - 하나의 스레드가 종료되면 프로세스가 종료되므로 다른 스레드에 영향을 끼치기도 함

멀티스레드 만들기

  1. 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) {}
        }
    }
}
  1. 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