-
day33_1 - JAVA (자바, 멀티 스레드)KIC/JAVA 2021. 7. 29. 12:00반응형
[스레드의 일반적인 상태]
[스레드 그룹]
-> 관련된 스레드를 묶어 관리 목적으로 이용한다.
-> 스레드 그룹은 계층적으로 하위 스레드 그룹을 가질 수 있다.
[자동 생성되는 스레드 그룹]
[스레드 그룹 생성]
-> 부모 그룹을 지정하지 않으면 현재 스레드에 속한 그룹의 하위 그룹으로 생성한다.
[스레드 폭증으로 일어나는 현상]
->병렬 작업 처리가 많아지면 스레드 개수 증가
-> 스레드 생성과 스케줄링으로 인해 CPU가 바빠짐
-> 메모리 사용량이 늘어남
->애플리케이션의 성능 급격히 저하[스레드 풀(Thread Pool)]
->작업 처리에 사용되는 스레드를 제한된 개수만큼 미리 생성해 놓는 것
-> 작업 큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다.-> 작업 처리가 끝난 스레드는 작업 결과를 애플리케이션으로 전달
-> 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리
[스레드 예제]
(동기화 x)
package javaPro.java_thread; // 스레드가 동기화 되지 않은 경우 class PrintThread extends Thread { char ch; PrintThread(char ch) { this.ch = ch; } public void run() { for (int i = 0; i < 20; i++) { for (int j = 0; j < 80; j++) { System.out.print(ch); } System.out.println(); } } } public class ThreadEx8 { public static void main(String[] args) { Thread t1 = new PrintThread('A'); Thread t2 = new PrintThread('b'); Thread t3 = new PrintThread('C'); t1.start(); t2.start(); t3.start(); } }
[스레드 예제2]
동기화 o
package javaPro.java_thread; // 스레드가 동기화 된 경우 class PrintThread extends Thread { char ch; PrintThread(char ch) { this.ch = ch; } static int[] lock = new int[3]; public void run() { for (int i = 0; i < 20; i++) { synchronized (lock) { // 이렇게 synchronized으로 for문을 동기화 시킨다. for (int j = 0; j < 80; j++) { System.out.print(ch); } System.out.println(); } // System.out.println(); } } } public class ThreadEx8 { public static void main(String[] args) { Thread t1 = new PrintThread('A'); Thread t2 = new PrintThread('b'); Thread t3 = new PrintThread('C'); t1.start(); t2.start(); t3.start(); } }
[동기화 메서드 예제]
package javaPro.java_thread; /* * 동기화 영역 * 동기화 메서드 예제 * => 공유객체의 메서드여야 함. * => 공유객체 : 모든 스레드가 하나의 객체를 공유하고 있어야 한다. */ class Printer { public synchronized void printChar(char ch) { // 동기화 메서드 for (int i = 0; i < 80; i++) { System.out.print(ch); } System.out.println(); } } class PrintThread3 extends Thread { Printer ptr; char ch; PrintThread3(Printer ptr, char ch) { this.ptr = ptr; this.ch = ch; } public void run() { for (int i = 0; i < 20; i++) { ptr.printChar(ch); } } } public class ThreadEx10 { public static void main(String[] args) { Printer ptr = new Printer(); Thread t1 = new PrintThread3(ptr, 'A'); Thread t2 = new PrintThread3(ptr, 'B'); Thread t3 = new PrintThread3(ptr, 'C'); t1.start(); t2.start(); t3.start(); } }
300x250'KIC > JAVA' 카테고리의 다른 글
day34 - JAVA (자바, IO스트림) (0) 2021.07.30 day33_2 - JAVA (자바, IO스트림) (0) 2021.07.29 day32 - JAVA (자바, 스트림 예제, 멀티 스레드) (0) 2021.07.28 day31 - JAVA (자바, 스트림, 플랫맵, 필터) (0) 2021.07.27 day30 - JAVA (자바, 스트림, 병렬 처리) (0) 2021.07.27