• Thread
    Language/Java 2023. 11. 29. 00:01

    프로그램이 실행되면 OS로 부터 메모리를 할당 받아 프로세스 상태가 된다. 하나의 프로세스는 하나 이상의 thread를 가지게 된다. 프로세스의 실제 작업을 수행하는 단위는 thread이다.

    Multi Threading

    • 여러 Thread가 동시에 수행되는 프로그래밍.
    • Thread는 각각 자신만의 작업 공간을 가진다. (= Context )
    • 각 Thread 사이에서 공유하는 자원 Shared Resource이 있을 수 있다. ( static instance )
    • 여러 Thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수 있다.
    • 여러 Thread가 공유하는 자원 중 경쟁이 발생하는 부분을 임계 영역 Critical Section이라고 한다.
    • 임계 영역에 대한 동기화 synchronized를 구현하지 않으면 오류가 발생할 수 있다.

    Java Code

    1. Thread 클래스 상속
    2. Runnable 인터페이스 구현 1
    3. Runnable 인터페이스 구현 2

    Thread 클래스 상속 구현

    Thread 상속 클래스 작성

    package thread;
    public class MyThread extends Thread {
    public void run() {
    int i;
    for (i = 1; i <= 200; i++) {
    System.out.print(i+ " ");
    }
    }
    }

    Thread 상속 구현한 클래스 실행

    package thread;
    public class ThreadStudy {
    public static void main(String[] args) {
    System.out.println(Thread.currentThread() + " start");
    MyThread t1 = new MyThread();
    MyThread t2 = new MyThread();
    // thread 실행 메서드
    t1.start();
    t2.start();
    System.out.println(Thread.currentThread() + " end");
    }
    }

    Runnable 인터페이스 구현 1 : 클래스에서 상속 받아 구현

    Runnable 구현 클래스 작성

    package thread;
    public class MyThread2 implements Runnable {
    @Override
    public void run() {
    int i;
    for (i = 1; i <= 200; i++) {
    System.out.print(i+ " ");
    }
    }
    }

    Runnable 구현한 클래스 실행

    package thread;
    public class ThreadStudy {
    public static void main(String[] args) {
    System.out.println(Thread.currentThread() + " start");
    MyThread2 runnable = new MyThread2();
    Thread t21 = new Thread(runnable);
    Thread t22 = new Thread(runnable);
    // thread 실행 메서드
    t21.start();
    t22.start();
    System.out.println(Thread.currentThread() + " end");
    }
    }

    Runnable 인터페이스 구현 2 : 메서드에서 instance

    package thread;
    public class ThreadStudy {
    public static void main(String[] args) {
    Runnable runnable = new Runnable() {
    @Override
    public void run() {
    System.out.println("run");
    }
    };
    runnable.run();
    }
    }

    'Language > Java' 카테고리의 다른 글

    싱글톤 패턴  (0) 2023.11.30
    OkHttp3 라이브러리 사용 with 비동기  (0) 2023.11.29
    제네릭 Generic 프로그래밍  (0) 2023.11.28
    Maven , Gradle  (0) 2023.11.28
    SQLite  (0) 2023.11.25

Designed by Tistory / Custom by 얼거스