IT/Java

자바 스레드 Thread

노마드오브 2018. 8. 5. 22:00

package test;


class Go {

void go() {

while(true) {

System.out.println("go");

}

}

}

class Come {

void come() {

while(true) {

System.out.println("come");

}

}

}


public class Test5 {


public static void main(String[] args) {

Go g = new Go();

Come c = new Come();

g.go();   // go만 실행된다

c.come();

} // main()의 끝


}




○ 멀티스레드 생성방법 2가지
1. java.lang.Thread 클래스 상속받는 하위클래스 작성
run() 메소드 오버라이딩
.start() 스레드 동작시킴

2. java.lang.Runnable 인터페이스 구현 클래스 작성
run() 메소드 오버라이딩
Thread 클래스 객체생성  Runnable 객체를 전달함
.thread


1. java.lang.Thread 클래스 상속받는 하위클래스로 작성한 스레드 예제

package test;

class GoThread extends Thread {  // Thread 상속
@Override
public void run() {   // run() 메소드 오버라이딩
while(true) {
System.out.println("go");
}
}
}
class ComeThread extends Thread {   // Thread 상속
@Override
public void run() {   // run() 메소드 오버라이딩
come();
}

void come() {
while(true) {
System.out.println("come");
}
}
}

public class Test6 {
public static void main(String[] args) {
GoThread goThread = new GoThread();
ComeThread comeThread = new ComeThread();
//goThread.run();  // run()을 사용자가 직접 호출하면 안됨!
goThread.start(); // JVM에게 스레드 시작을 부탁하기. 스레드 시작.
comeThread.start(); // 스레드 시작하기.

} // main()의 끝

}


●  2. java.lang.Runnable 인터페이스 구현 클래스로 작성한 스레드 예제

package test;

class GoRunnable implements Runnable {    // Runnable 인터페이스 구현
@Override
public void run() {  // run() 메소드 오버라이딩
while(true) {
System.out.println("go");
}
}
}
class ComeRunnabel implements Runnable {   // Runnable 인터페이스 구현
@Override
public void run() {   // run() 메소드 오버라이딩
come();
}

void come() {
while(true) {
System.out.println("come");
}
}
}


public class Test7 {
public static void main(String[] args) {
// 1 방법
// GoRunnable g = new GoRunnable();  // 스레드가 할 일을 객체단위로 준비
// ComeRunnabel c = new ComeRunnabel();
// Thread t1 = new Thread(g);  // 일꾼(스레드객체)에게 할 일을 전달
// Thread t2 = new Thread(c);
/*
Thread 생성자
Thread(Runnable target) {
// 외부에서 start()가 호출되면,
  target.run();
}
*/
// t1.start();
// t2.start();

//////////////////////////////////////////////
// 2 방법
// Thread t1 = new Thread(new GoRunnable());
// t1.start();
// 3 방법
new Thread(new GoRunnable()).start();
//////////////////////////////////////////////
// 4 방법
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println("go");
}
}
}).start();
}  // main()의 끝

}



package test;

public class Test8 {

public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
System.out.println(Thread.currentThread().getPriority());  // 우선순위
// 스레드의 우선순위 1~10
System.out.println(Thread.MAX_PRIORITY);  // 10 
System.out.println(Thread.NORM_PRIORITY);  // 5 기본값 
System.out.println(Thread.MIN_PRIORITY);  // 1 
Thread.currentThread().setPriority(7);
}

}