728x90
1. 스레드란?
▷ 메모리를 할당받은 프로세스에서 실질적인 작업을 수행하는 것입니다.
▷ 하나의 프로세스 안에서 두 가지 이상의 일을 하도록 도와줍니다.
프로그램을 실행시키면 메모리가 할당되어 실행됩니다.
이때, 실행 중인 프로그램은 프로세스!
프로세스에서 작업을 수행하는 것이 스레드이며 두 가지 이상의 작업을 하려면 두 개 이상의 스레드가 필요
◎ 프로세스가 실행되는 방식
1. 시간분할 방식
▷ 시간분할 방식은 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행합니다.
2. 선점형 방식
▷ 선점형 방식은 각각의 프로세스에게 우선순위를 부여하고 우선순위가 높은 순으로 실행되는 방식입니다.
우선순위가 높은 프로세스가 잠시 멈추면 그다음 순위의 프로세스가 동작합니다.
◎ 스레드 생성 방법
1. Thread 클래스를 상속받는 방법
2. Runnable 인터페이스를 구현하는 방법
→ Thread 클래스를 상속받아서 사용하는 것이 간단하지만 인터페이스를 사용 하면 다중상속이 가능하기 때문에 주로 Runnable을 사용합니다.
◎ 프로세스 실행되는 방식 예제
public class Thread1 { public static void main(String[] args) { MyThread th1 = new MyThread(); Runnable th2 = new MyThread2(); Thread t = new Thread(th2); th1.start(); t.start(); for(int i=0; i<10; i++) { System.out.println("메인 함수 진행 중" + i); } } } class MyThread extends Thread{ public void run() { for(int i=0; i<10; i++) { System.out.println("스레드 진행 중" + i); } } } class MyThread2 implements Runnable{ public void run() { for(int i=0; i<10; i++) { System.out.println("러너블 진행 중" + i); } } } // 출력 : // 메인 함수 진행 중0 // 메인 함수 진행 중1 // 메인 함수 진행 중2 // 메인 함수 진행 중3 // . // . // . // 러너블 진행 중5 // 러너블 진행 중6 // 러너블 진행 중7 // 러너블 진행 중8 // 러너블 진행 중9 // 스레드 진행 중9
출력은 우선순위에 따라 매번 바뀌기 때문에 여기서 나오는 순서는 중요하지 않습니다.
2. 스레드의 우선순위
public class Thread2 { public static void main(String[] args) { Runnable t = new MyThread3(); Thread t1 = new Thread(t, "thread1"); t1.setPriority(1); // 우선순위 1로 지정 System.out.println("t1의 우선순위는 : " + t1.getPriority()); // getPriority()는 우선순위를 반환합니다. Thread t2 = new Thread(t, "thread2"); // 아무 우선순위도 지정하지 않을 경우 우선순위5 System.out.println("t2의 우선순위는 : " + t2.getPriority()); Thread t3 = new Thread(t, "thread3"); t3.setPriority(10); // 우선순위 10으로 지정 System.out.println("t3의 우선순위는 : " + t3.getPriority()); t1.start(); t2.start(); t3.start(); } } class MyThread3 implements Runnable{ public void run() { for(int i=0; i<5; i++) { System.out.println("<" + Thread.currentThread().getName() + ">"); } for(int i=0; i<1000; i++) { // 시간 지연 } } } // 출력 : // t1의 우선순위는 : 1 // t2의 우선순위는 : 5 // t3의 우선순위는 : 10 // <thread2> // <thread1> // <thread3> // . // . // . // <thread2> // <thread1> // <thread1>
특정 스레드의 우선순위의 숫자가 클수록 데이터를 한 번에 처리하는 수가 많아진다고 합니다.
컴퓨터를 잘 사용하시는 분들의 이야기를 한 번씩 보면 스레드가 되게 중요하다는 것을 알 수 있습니다.
스레드는 한꺼번에 여러개를 동시에 사용할 수 있는 것이라고 알고있습니다.
이번 글에서는 잠깐 맛보기만 한 후 설 끝나고 수업 후 정리해보도록 하겠습니다!!
즐거운 명절 보내세요~~~
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

728x90
'BackEnd > Java' 카테고리의 다른 글
[백준 문제 2941번] 크로아티아 알파벳 문제 (0) | 2023.01.24 |
---|---|
[백준 문제 1152번] 단어의 개수 문제 (0) | 2023.01.22 |
[java] 이것이 자바다 ch13 제네릭(Generic) (0) | 2023.01.21 |
[java] 이것이 자바다 ch12 어노테이션(annotation) (0) | 2023.01.21 |
[java] 이것이 자바다 ch12 리플렉션(reflection) (0) | 2023.01.21 |