보호되어 있는 글입니다.
JAVA
보호되어 있는 글입니다.

Thread Pool은 Thread를 보유하고 있다가 순서에 따라 빌려주고, 사용 후 돌려받는 것으로 대여소 같은 역할을 수행한다 또한 요청이 많을시 유용하며 단발성 작업엔 어울리지 않는다. 생성시에는 초기/코어/최대 Thread 수를 명시해주며 ExecutorService 객체를 통해 생성된다 package chap01.ex11; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPool { public static void main(String[] args) { //Thread Pool 생성 방법(Cached, Fixed에 집중) // 1개 이상의 Thread가 추가되..

Daemon Thread는 Main Thread 작업을 돕는 보조적인 역할을 수행한다 또한 Main Thread가 살아있는 동안에만 작동하며 Main Thread와 life-cycle 같이한다 package chap01.ex10; public class Main { public static void main(String[] args) throws InterruptedException { System.out.println("메인스레드 시작"); Thread daemon = new DaemonThread(); //다형성 // Work Thread는 Main Thread가 죽어도 계속 활동한다. // 이때 Daemon Thread로 변경하면 Main Thread 종료시 함께 종료 시킬 수 있다. daemon...

Thread는 유용한 기능이지만 예상대로 움직이지 않는다 그래서 Thread를 Control하기 위한 method들이 존재한다 (1) sleep() 주어진 milliseconds 동안 Thread를 일시정지한다 (2) yield() 특정 Thread에게 제어권을 양보하는 것으로 정확히 말하자면 상대에게 실행할 '기회'를 주는 것이다 즉 확정적으로 주는 것이 아니기에 완벽한 순서제어가 되지 않는다. 다음은 이 둘을 쓴 코드이다 package chap01.ex06; public class MainThread { public static void main(String[] args) throws InterruptedException { WorkThread thA = new WorkThread(); thA.set..

Thread는 생성부터 종료까지의 상태값이 있는데 getState()를 통해 현재 상태를 알 수 있다 상태에는 크게 객체생성, 실행대기, 일시정지 그리고 종료 4가지가 있다 우선 객체생성에는 NEW 가 있다. NEW는 스레드 객체를 생성하며 start() 호출 전에 쓴다 다음으로 실행대기에는 Runnable이 있다 Runnable은 실행 상태로 언제든지 이동할 수 있는 상태를 나타낸다 그리고 일시정지에는 Waiting, Timed_Waiting, Blocked가 있는데 Waiting은 다른 Thread가 통지할때까지 기다리는 상태이며 Timed_Waiting은 주어진 시간동안 기다리는 상태이며 Blocked는 사용하려는 객의 Lock이 풀릴때까지 기다리는 상태이다 마지막으로 종료에는 Terminated가..

Thread는 먼저 시작한 일이 반드시 먼저 끝나지는 않는다 Round Robin 방식을 사용하기 때문이다 또한 Thread는 memory를 공유하므로 간섭효과가 생기는데 이를 방지하는게 동기화(Synchronize)이다 동기화란 다른 Thread가 쓰고 있을때는 완벽하게 일이 끝나기 전까지 못들어가게 하는것이다 즉, 내 작업이 다 끝나기 전에는 아무도 접근하지 못하게 방지하는 것이다 그에 관한 예시코드이다 package chap01.ex04; public class User1 extends Thread{ // Computer 객체가 클래스가 끝날때까지 남아있으면 실선 private Computer com; public User1(Computer com) { setName("user 1"); this.c..

Thread 생성방법에는 크게 2가지가 있다 하나는 Runnable interface를 구현하는 방법이고 다른하나는 Thread Class를 상속하는 방법이다 (1) Runnable interface 구현 우선 Runnable interface를 통한 구현은 implements Runnable을 통해서 이루어진다 package chap01.ex01; public class Job implements Runnable { @Override public void run() { // 스레드에 시킬 일 for (int i = 0; i < 3; i++) { System.out.println("work thread가 하는 일..."); try { Thread.sleep(1000); } catch (Interrupte..