KH 16일차 (Thread, Runnable)
16일차인 오늘은 Thread와 Runnable을 중심으로 학습했다.
package ja_0721;
class MyThreadTest_3 extends Thread{
public MyThreadTest_3(String name) {
super(name);
}
@Override
public void run() {
try {
for(int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println(" " + i + " 번 " + getName() + " : 스레드 ");
}
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public class MyThread_3 {
public static void main(String[] args) {
MyThreadTest_3 obj_1 = new MyThreadTest_3("첫번째");
MyThreadTest_3 obj_2 = new MyThreadTest_3("두두번째");
MyThreadTest_3 obj_3 = new MyThreadTest_3("세세번째");
// obj_1.start();
// obj_2.start();
// obj_3.start();
obj_1.run();
obj_2.run();
obj_3.run();
}
}
15일차에 학습한 Thread를 extends 받아 3개의 MyThreadTest_3 객체에서 받은 매개변수를 Thread와 함께 처리하는 코드를 Runnalbe 인터페이스를 활용해서 변형해봤다.
package ja_0721;
class MyRunnable_3_1 implements Runnable{
String name;
public MyRunnable_3_1(String name) {
this.name = name;
}
@Override
public void run() {
try {
for(int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println(" " + i + " 번 " + name + " : 스레드 ");
}
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public class RunnableTest_2 {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable_3_1("첫번째"));
Thread thread2 = new Thread(new MyRunnable_3_1("두번째"));
Thread thread3 = new Thread(new MyRunnable_3_1("첫번째"));
thread.run();
thread2.run();
thread3.run();
}
}
Thread를 상속받아 name을 내려받는 방법 대신에, Runnable 인터페이스에서는 멤버 변수 String name을 선언하고 name을 매개변수로 가지고 있는 생성자 메서드를 활용해서 name 변수에 값을 저장하고 출력해주는 방법을 택했다.
. Runnable 사용 방법
1. Runnable 인터페이스를 implements 하는 클래스를 정의 한다.
2. Runnable 인터페이스의 run() 메소드를 재정의 합니다.
class RunnalbeTest implements Runnable // Runnable 인터페이스 구현
{
public void run() // run() 메소드 재정의
{
...;
}
}
3. main() 메소드에서 Runnable 인터페이스를 구현한 클래스 객체를 생성
4. Thread 클래스 객체를 생성하면서 생성자에 3. 에서 생성한 객체를 매개 변수로 전달
5. 4. 에서 생성한 객체를 사용해 start() 메소드 호출
public static void main(String[] args)
{
RunnalbeTest obj = new RunnableTest(); // 객체 생성
Thread thread = new Thread(obj); // thread 클래스 객체 생성
thread.start(); // start() 메소드 호출
}
오늘은 Thread 객체를 Runnable 인터페이스로 변환하는 코드 작업을 반복했는데, 처음에는 눈에 들어오지 않던 인터페이스가 익숙해지니, 눈에 보이기 시작했다.