-
ThreadLanguage/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
- Thread 클래스 상속
- Runnable 인터페이스 구현 1
- 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