728x90
반응형
멀티스레드
스레드란 한개의 프로세스에서 작동되는 실행 작동 장치이다.
즉, 멀티스레드의 의미는 한개의 프로세스에서 여러가지 작업을 하는 실행 작동 장치이다.
멀티스레드를 쓰는 것이 여러모로 좋지만, 아래의 사항에 주의해야한다.
- 동기화를 주의해야한다.
- 각 스레드가 효율적으로 고르게 실행되게 작성해야한다.
스레드의 구현과 실행
두가지의 방법을 사용할 수 있다.
- Thread 클래스를 상속
- Runnable 인터페이스를 구현
Thread는 extends를 사용하여 클래스를 상속받고, Runnable의 경우에는 implements를 사용하여 Runnable 인터페이스를 상속받는다.
public class ThreadRunnable{
public static void main(String[] args) {
Nthread t = new Nthread();
// Thread의 경우에는 클래스 이름을 자료형으로 선언하고
Runnable r = new Rthread();
Thread t2 = new Thread(r);
// Runnable인 경우에는 먼저 클래스의 주소값을 Runnable클래스에 할당하고
// Thread클래스에 주소값을 담는다.
}
}
class Nthread extends Thread{
public void run() {
for(int i = 0; i<100; i++) {
System.out.print("/");
}
}
}
class Rthread implements Runnable{
public void run() {
for(int i = 0; i<100; i++) {
System.out.print("-");
}
}
}
스레드의 우선순위
스레드는 기본적으로 OS스케줄러에 의해 우선순위가 결정되는데, 우리가 JVM을 통해 우선권을 할당해줄 수 있다.
- JVM을 통해 1 부터 10까지 할당이 가능하고 setPriority 메서드를 통해 할당이 가능하다.
- 단, 할당해주지 않아도 자동으로 5로 설정되어있다.
주의할 점: 우선권을 높여준다고 하더라도, 기본적으로 OS스케줄러에 의존하고 있기 떄문에 우선권이 높은 스레드가 먼저 끝날 확률이 높은 것뿐이지 절대로 먼저 끝난다고 확언할 수 없다.
public static void main(String[] args) {
highthread t = new highthread();
Runnable r = new lowthread();
Thread t2 = new Thread(r);
System.out.println("기본 Priority: " + t.getPriority());
t.setPriority(9);
System.out.println("세팅된 Priority: (ㅡ)" + t.getPriority());
t.start();
t2.start();
// 1-10까지 정해줄 수 있지만 OS스케줄러가 권환을 줄 수 있기 때문에 항상 먼저 끝나는 것은 아니다.
}
}
class highthread extends Thread{
public void run() {
for(int i = 0; i<100; i++) {
System.out.print("ㅡ");
}
}
}
class lowthread implements Runnable{
public void run() {
for(int i = 0; i<100; i++) {
System.out.print("|");
}
}
}
스레드 그룹 & 메서드
모든 스레드는 반드시 하나의 그룹에 속해있어야 하는데, 그룹을 지정하지 않을 경우 main그룹에 속해있다.
자신을 생성한 그룹의 우선순위(기본 우선순위: 5)를 상속받는다

728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 12장 (33일차) - 데몬쓰레드 & 쓰레드 실행과정 (0) | 2022.02.24 |
---|---|
자바의 정석 12장 (31일차) - 열거형 (enum) (0) | 2022.02.22 |
자바의 정석 12장 (31일차) - 와일드카드 <?> & 지네릭스 형변환 (0) | 2022.02.22 |
자바의 정석 12장 (30일차) - 지네릭스(Generics) & 타입 변수 & 제약 (0) | 2022.02.21 |
자바의 정석 11장 (30일차) - Collections 클래스 (0) | 2022.02.21 |