본문 바로가기
언어/JAVA

Thread 1

by step 1 2021. 5. 23.
반응형

Thread

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

multi-threading

  • 여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과
  • thread는 각각 자신만의 작업 공간을 가짐(context)
  • 각 thread 사이에서 공유하는 자원이 있을 수 있음 (자바에서는 static instance)
  • 여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할  수 있음
  • 이렇게 여러 thread가 공유하는 자원중 경쟁이 발생하는 부분을 critical section 이라고 함
  • critical section에 대한 동기화 (일종의 순차적 수행)을 구현하지 않으면 오류가 발생할 수 있음

Thread.currentThread(): 스레드 정보를 출력

  • Thread[main,5,main]
    main: 스레드가 실행된 함수, 5: 우선순위, main: 속한 그룹
package ch67;

import java.util.Iterator;

class MyThread extends Thread {
	
//	스레드가 시작 되면 수행될 메서드
	@Override
	public void run() {
		
		int i;
		for (i = 1; i <= 200; i++) {
			System.out.print(i + "\t");
		}
	}
}



public class ThreadTest {

	public static void main(String[] args) {
//		Thread를 상속받았을 경우의 예
//		Thread[main,5,main]
//		main: 스레드가 실행된 함수, 5: 우선순위, main: 속한 그룹
		System.out.println(Thread.currentThread() + "start");
		MyThread th1 = new MyThread();
		MyThread th2 = new MyThread();
		
//		스레드 시작
		th1.start();
		th2.start();
		System.out.println(Thread.currentThread() + "end");
	}
}

 

Runnable 인터페이스 구현하여 만들기

자바는 다중 상속이 허용되지 않으므로 이미 다른 클래스를 상속한 경우 thread를 만들기 위해 Runnable Interface를 구현하도록 한다.

class MyThread implements Runnable {
	
//	스레드가 시작 되면 수행될 메서드
	@Override
	public void run() {
		
		int i;
		for (i = 1; i <= 200; i++) {
			System.out.print(i + "\t");
		}
	}
}



public class ThreadTest {

	public static void main(String[] args) {
//		Thread를 상속받았을 경우의 예
//		Thread[main,5,main]
//		main: 스레드가 실행된 함수, 5: 우선순위, main: 속한 그룹
		System.out.println(Thread.currentThread() + "start");
		
		MyThread runnable = new MyThread();
		Thread th1 = new Thread(runnable);
		Thread th2 = new Thread(runnable);
		
//		스레드 시작
		th1.start();
		th2.start();
		System.out.println(Thread.currentThread() + "end");
	}
}
//		간단하게 실행할 경우 아래와 같이 사용할 수 있다.
		Runnable run = new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("1");
			}
		};
		run.run();

 

 

스레드가 Runnable 에서 Not Runnable 상태로 변경될 때의 예

sleep(시간), wait(), join()

 

원래 상태로 돌아올 때의 예

sleap(시간) -> 시간이 지난 후

wait() -> notify(), notifyAll()

join() -> other thread exits

참고

JAVA 쓰레드란(Thread) ? - JAVA에서 멀티쓰레드 사용하기 | 기록하는 개발자 (honbabzone.com)

 

JAVA 쓰레드란(Thread) ? - JAVA에서 멀티쓰레드 사용하기

JAVA에서 Thread사용하는 방법을 배우고 멀티코어 환경에서 멀티 쓰레드를 사용하는 방법을 알아보겠습니다.

honbabzone.com

 

반응형

'언어 > JAVA' 카테고리의 다른 글

Thread 3 (멀티 스레드 동기화)  (0) 2021.05.29
Thread 2 (여러 메서드)  (0) 2021.05.29
데코레이터 패턴  (0) 2021.05.23
입출력 클래스(File, RandomAccessFile)  (0) 2021.05.23
DataStream, 직렬화  (0) 2021.05.23