본문 바로가기

Archived(CSE Programming)/Java

Java_Thread

스레드는 작업의 단위, 프로세스 내에서 기생하는 프로세스

 

자바는 객체지향이다

플랫폼 독립적이고 JVM에 의존적이다

스레드 언어로서 멀티스레드 지향 언어(프로세스 기반과 대비)

> 이러한 특징으로부터 웹 중심으로 자바 성장(스레드 풀)

기존의 웹에서 프로세스 중심으로 처리하면 서버에서 객체 1000개 생성 등 소모 지나침

 

우리는 스레드에 대한 이해는 필요하다(직접적으로 프로그래밍할 일 많지 않음)

 

Java는 두 가지 방법을 통해 스레드 생성 가능(Thread Class 상속, Runnable 인터페이스)

Thread를 상속하는 것 보다는 Runnable이 자주 쓰임(단일 상속이기에 중요한 다른 class 상속하기 위해)

Thread Lifecycle
Thread Race Condition

cf. callback 함수: 호출을 명시하지 않는 함수

package com.sinc.intern.thread;

public class SincThread implements Runnable{

	// callback 함수
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int idx = 0 ; idx < 26 ; idx++) {
			System.out.print((char)('A' + idx));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
import com.sinc.intern.thread.SincThread;

public class ThreadMain {

	public static void main(String[] args) {
		System.out.println("main start");
		
		// 객체 생성(아직까지 스레드가 아닌 스레드의 대상)
		SincThread runnable = new SincThread();
		Thread thread = new Thread(runnable);
		thread.start();
		
		System.out.println("main end");		
	}
}

Thread에서 주의해야할 부분

  • DeadLock(non-Shareable 한 대상을 대상으로)
  • 왕자 없는 백설공주 주의

 

'Archived(CSE Programming) > Java' 카테고리의 다른 글

Java_Stream  (0) 2020.01.17
Java_예외처리  (0) 2020.01.17
Java_다형성과 컬렉션  (0) 2020.01.16
Java_OOP와 다형성  (0) 2020.01.14
Java_자바의 기본  (0) 2020.01.13