package multi_thread;
import java.awt.Toolkit;
public class ThreadPriority {
public static void main(String[] args) {
// 방법1
Thread thread = new BeepThread();
thread.start();
thread.setPriority(Thread.MAX_PRIORITY); // 우선순위 10
thread.setPriority(Thread.NORM_PRIORITY); // 우선순위 5
thread.setPriority(Thread.MIN_PRIORITY); // 우선순위 1
// 방법2 (익명 객체를 이용한 방법)
/*
Thread thread2 = new Thread() {
public void run() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
for(int i = 0 ; i < 5 ; i++) {
toolkit.beep();
try {Thread.sleep(500);} catch(Exception e) {}
}
}
};
thread2.start();
*/
for (int i = 0 ; i < 5 ; i++) {
System.out.println("띵");
try {Thread.sleep(500);} catch(Exception e) {}
}
}
}
위는 저번에 했던 예제를 그냥 가져왔습니다. 이번 내용은 큰 실습내용이 없기 때문입니다.
멀티스레드가 병렬적으로 실행되는 거라고 했는데 실제로는 번갈아가면서 실행하는 작업입니다.
자바에서 스레드 스케줄링은 우선순위(Priority) 방식과 순환 할당 (Round-Robin) 방식을 사용합니다. 우선순위가 높은 스레드가 실행 상태를 더 많이 가져가게 되는 것이소 시간 할당량(Time slice)를 정해서 하나의 스레다가 정해진 시간만큼 실행 하고 다른 스레드를 실행하는 방식입니다.
thread.setPriorty(우선순위); 를 이용해 우선순위를 정해줄 수 있습니다. 1 ~ 10까지 값이 들어갑니다. 기본적으로 모든 스레드는 5 우선순위를 할당 받습니다. 1은 가장 낮고10이 가장 높습니다.
package error_throws;
public class Calculator {
public static int add (int x, int y) throws 천을_넘는_예외, 음수가_되는_예외 {
int result = x + y;
if(result > 1000) {
throw new 천을_넘는_예외();
// throw new NullPointerException();
}
if(result < 0) {
throw new 음수가_되는_예외();
}
return x + y;
}
}
package error_throws;
public class 음수가_되는_예외 extends Exception {
@Override
public String getMessage() {
return "입력 값이 음수인 오류가 발생했습니다.";
}
}
package error_throws;
public class 천을_넘는_예외 extends Exception {
}
package error_throws;
public class ErrorThrows {
public static void main(String[] args) {
Calculator calc = new Calculator();
int result = 0;
// result = Calculator.add(6, 4); 예외처리를 해줘야한다.
try {
result = Calculator.add(-6, 4);
}catch(음수가_되는_예외 e) {
System.out.println(e.getMessage());
System.out.println("음수가 발생 되었습니다.");
}catch(천을_넘는_예외 e) {
}
System.out.println("add : " + result);
}
}
컴파일하기 전에 빨간줄이 그어지는 에러가 있고 그렇지 않은 것이 있는데요 만약 값이 제대로 안 넘어갈 경우
컴파일은 됐지만 NullPointException이라는 에러가 나오게 됩니다. 이러한 것들을 처리하기 위해서 저번에
try catch문을 썼는데요 그걸 이제 더 발전 시켜서 사용해보려고 합니다.
더하기 계산 기능을 넣으려고 합니다.
public static int add (int x, int y) throws 천을_넘는_예외, 음수가_되는_예외 {
int result = x + y;
if(result > 1000) {
throw new 천을_넘는_예외();
// throw new NullPointerException();
}
if(result < 0) {
throw new 음수가_되는_예외();
}
return x + y;
}
static으로 선언해 주세요 throws는 신경 쓰지마시고 저희가 임의로 에러를 만드려고 합니다.
1000이라는 합이 나오면 에러가 나오도록 그리고 합이 음수가 나오면 에러가 나오도록 하려고 합니다.
throw new라는 건 에러를 강제로 발생시키는 것입니다.
여기에서 우리가 만든 걸 쓸 수도 원래 있는 에러를 넣을수도 있습니다.
throw new 천을_넘는_예외(); 이런식으로 하면 천을_넘는_예외를 만들라고 빨간줄이 그어집니다.
가져다대시고 class를 만든다를 클릭해서 만들어주세요
package error_throws;
public class 천을_넘는_예외 extends Exception {
}
이렇게 만들어지게 됩니다.
이 클래스에서는 에러를 처리해주는 역할을 해줍니다. 어떤식으로 메세지를 반환할지 등...
아무것도 안 적을 수도 있습니다.
그리고 throws를 추가해줘야합니다.
public static int add (int x, int y) throws 천을_넘는_예외, 음수가_되는_예외 {
....
throws란 무엇이냐면 던진다는 뜻인데 s라서 여러개를 던질 수 있게 한다는 의미입니다.
여기에선 2개를 넘기도록 되어있는데 이게 어디로 던지냐고한다면 해당 에러가 발생한다면
예를 들어 result가 1000이 넘어가서 예외가 발생하면 그걸
위에 천을_넘는_예외라는 클래스에서 처리하겠다는 의미입니다.
package error_throws;
public class 음수가_되는_예외 extends Exception {
@Override
public String getMessage() {
return "입력 값이 음수인 오류가 발생했습니다.";
}
}
또한 예외 메세지를 넘길 때 이러한 방법으로도 넘길 수 있습니다.
getMessage()를 오버라이드 해서 사용 가능합니다.
try {
result = Calculator.add(-6, 4);
}catch(음수가_되는_예외 e) {
System.out.println(e.getMessage());
System.out.println("음수가 발생 되었습니다.");
}catch(천을_넘는_예외 e) {
}