04.스레드 식별과 속성
스레드 식별과 속성
지금 어떤 스레드가 실행 되고 있는가?
- 동일한 코드를 실행 할 경우에 현재 코드를 실행하는 스레드를 식별하기 위한 속성
- 스레드를 식별하는 정보들 ``` ID : 스레드의 식별 값
Name: 스레드의 이름
Priority: 스레드의 우선순위 (범위:MIN(0)~MAX(10)) 숫자가 클 수록 우선 순위가 높음
Status: 스레드의 상태 (new, runnable, blocked, waiting, time waiting, terminated)
```java
package javastudy;
public class Proagram3 {
public static void main(String[] args) {
Runnable subMain = new Runnable() {
@Override
public void run() {
print();
}
};
Thread th1 = new Thread(subMain);
Thread th2 = new Thread(subMain);
th1.start(); // 꼭 있어야 한다
th2.start(); // 꼭 있어야 한다
for (int i = 0; i < 100; i++)
System.out.printf("main: %d\n", i + 1);
}
private static void print() {
for (int i = 0; i < 100; i++)
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.printf("sub1 : %d\n", i + 1);
}
}
sub1 : 55
sub1 : 56
sub1 : 57
sub1 : 58
main: 62
main: 63
main: 64
main: 65
위의 코드는 어느 스레드를 사용하는지 모르기때문에 스레드를 식별하기 위해서는 스레드를 식별하는 정보를 추가한다
- 스레드 식별하기
private static void print() {
Thread th = Thread.currentThread();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 쓰레드 이름 쓰레드 아이디
System.out.printf("%s[%d] : %d\n", th.getName(), th.getId(), i + 1);
}
}
}
hread-1[15] : 2
Thread-0[14] : 2
Thread-1[15] : 3
Thread-0[14] : 3
Thread-0[14] : 4
Thread-1[15] : 4
Thread-0[14] : 5
Thread-1[15] : 5
Thread-1[15] : 6
위의 코드같은 경우는 스레드의 이름과 아이디가 나왔지만 지정을 하지 않았기 때문에 무슨 스레드인지 모른다 따라서 지정을 해줘서 무슨 스레드인지 식별한다
package javastudy;
public class Proagram3 {
public static void main(String[] args) {
Runnable subMain = new Runnable() {
@Override
public void run() {
print();
}
};
Thread th1 = new Thread(subMain);
th1.setName("sub1");
Thread th2 = new Thread(subMain);
th2.setName("sub2");
th1.start(); // 꼭 있어야 한다
th2.start(); // 꼭 있어야 한다
for (int i = 0; i < 100; i++)
System.out.printf("main: %d\n", i + 1);
}
private static void print() {
Thread th = Thread.currentThread();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 쓰레드 이름 쓰레드 아이디
System.out.printf("%s[%d] : %d\n", th.getName(), th.getId(), i + 1);
}
}
}
sub2[15] : 2
sub1[14] : 2
sub1[14] : 3
sub2[15] : 3
sub1[14] : 4
sub2[15] : 4
sub2[15] : 5
sub1[14] : 5
sub2[15] : 6
sub1[14] : 6
sub2[15] : 7
sub1[14] : 7
sub1[14] : 8
sub2[15] : 8
sub1[14] : 9
sub2[15] : 9
- 메인 스레드를 지울 경우
package javastudy;
public class Proagram3 {
public static void main(String[] args) {
Runnable subMain = new Runnable() {
@Override
public void run() {
print();
}
};
Thread th1 = new Thread(subMain);
th1.setName("sub1");
Thread th2 = new Thread(subMain);
th2.setName("sub2");
th1.start(); // 꼭 있어야 한다
th2.start(); // 꼭 있어야 한다
print();
}
private static void print() {
Thread th = Thread.currentThread();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 쓰레드 이름 쓰레드 아이디
System.out.printf("%s[%d] : %d\n", th.getName(), th.getId(), i + 1);
}
}
}
메인스레드는 지정하지 않아도 출력된다
main[1] : 1
sub1[14] : 1
sub2[15] : 1
main[1] : 2
sub2[15] : 2
sub1[14] : 2
main[1] : 3
sub1[14] : 3
sub2[15] : 3
main[1] : 4
메인 스레드도 아래와 같이 이름을 지정해서 사용 가능하다
package javastudy;
public class Proagram3 {
public static void main(String[] args) {
Runnable subMain = new Runnable() {
@Override
public void run() {
print();
}
};
Thread th1 = new Thread(subMain);
th1.setName("sub1");
Thread th2 = new Thread(subMain);
th2.setName("sub2");
th1.start(); // 꼭 있어야 한다
th2.start(); // 꼭 있어야 한다
Thread th = Thread.currentThread();
th.setName("Main");
print();
}
private static void print() {
Thread th = Thread.currentThread();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 메인일 경우 다르게 호출하고 싶을경우
if (th.getName().equals("Main"))
System.out.printf("<%s[%d] : %d\n", th.getName(), th.getId(), i + 1);
else
System.out.printf("%s[%d] : %d\n", th.getName(), th.getId(), i + 1);
}
}
}
sub2[15] : 1
sub1[14] : 1
<Main[1] : 1
sub2[15] : 2
sub1[14] : 2
<Main[1] : 2
sub2[15] : 3
sub1[14] : 3
<Main[1] : 3
sub2[15] : 4
sub1[14] : 4
<Main[1] : 4
댓글남기기