MarmellataDev

웹개발 측면에선 Spring 에서 자동으로 구현하기 때문에 깊이 들어가지 않으나,

Java 에선 분명히 비중있고, 깊이 관여하는 부분이다.

 

프로세스

실행 프로그램

 

쓰레드

프로세스 안에 실행하는 실행 단위

기본적인 메커니즘은 처리 속도 향상을 위해 사용한다

 

 

Java에서 여태 작성했던 것에 쓰레드를 신경쓰지 않았다면, 단일 쓰레드로  쓰레드 1개로 작동했던 것이다.

그러므로 해당 프로그램은 멀티코어 지원을 하지 않는 경우를 생각 하면 된다.

 

쓰레드는 양날의 검

장점 : 처리 속도가 향상 된다.

단점 : 필요 이상의 쓰레드의 수는 메모리, CPU 의 자원 소모가 많아진다.

 

 

이해를 돕자면,

쓰레드 - 종업원

종업원 여러명 두면 가게를 더 빠르게 운영 되어, 돈을 더 많이 벌 수 있다.

단, 종업원이 일을 잘한다는 전제가 있어야 한다.

 

종업원이 일을 잘하면 좋지만, 아니라면 오히려 피해다.

 

 

결론

쓰레드. 잘 못쓰면 망한다.

 

 

join()

실행 흐름을 통합

Main 구문이 순서 상관없이 실행되는 것을 방지 할 수 있다.

 

사용예제

package Day30;

public class ExDoubleThread2 {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		DThread t1 = new DThread("자바");
		DThread t2 = new DThread("스프링");
		System.out.println("스레드 동작 전===========================");
		t1.start();
		t2.start();
		t1.join(); // InterruptedException throws 가 필요한다.
		t2.join();
		System.out.println("스레드 동작 후 ===========================");

	}

}

출력 결과

스레드 동작 전===========================
자바1
자바2
자바3
자바4
자바5
자바6
자바7
스프링1
자바8
자바9
스프링2
자바10
완료 !!!!!자바
스프링3
스프링4
스프링5
스프링6
스프링7
스프링8
스프링9
스프링10
완료 !!!!!스프링
스레드 동작 후 ===========================

 

Priority 로 쓰레드의 처리 우선 속도를 변화를 줄수 있다.

MAX에 가까울수록 더 빠르게 처리 되지만, 실제 결과론 큰 변화는 없다.

사용예시

package Day32;

class PriTest extends Thread{
	PriTest(String str){
		setName(str);
	}
	public void run() {
		for(int i = 0;i<5;i++) {
			System.out.println(i+getName()+"순위 : "+getPriority());
		}
	}
}

public class ThreadPriorityTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PriTest p1 = new PriTest("1번");
		PriTest p2 = new PriTest("2번");
		PriTest p3 = new PriTest("3번");
		
		p1.setPriority(Thread.MAX_PRIORITY); // 1등
		p2.setPriority(Thread.NORM_PRIORITY); // 2등
		p3.setPriority(Thread.MIN_PRIORITY); // 3등
		
		p1.start();
		p2.start();
		p3.start();
	}

}

처리결과

02번순위 : 5
12번순위 : 5
01번순위 : 10
11번순위 : 10
21번순위 : 10
31번순위 : 10
41번순위 : 10
03번순위 : 1
22번순위 : 5
32번순위 : 5
13번순위 : 1
42번순위 : 5
23번순위 : 1
33번순위 : 1
43번순위 : 1

'Java > Chapter' 카테고리의 다른 글

Java Chapter.27 - 네트워크, TCP/IP  (0) 2023.04.26
Java Chapter.25 - Split  (0) 2023.04.24
Java Chapter.24 - Time, Calendar  (0) 2023.04.24
Java Chapter.23 - Try, Catch  (0) 2023.04.24
Java Chapter.21 - Arraylist  (0) 2023.04.19
profile

MarmellataDev

@Marmellata

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!