Runnable
2023. 7. 19. 12:39ㆍJAVA
Thread를 만드는 2가지 방법
1. Thread클래스를 상속하는 클래스를 설계하여 사용
2. Runnable인터페이스를 구현하는 클래스를 설계하여 사용
인터페이스가 존재하는 이유가 뭘까?
다중 상속의 효과를 보고 싶어서..
Person클래스의 능력을 가지면서.. 동시에 스레드의 능력도 보유한 객체를 생성
class Person{
String name;
int age;
}
class PersonThread extends Person implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i<5; i++) {
System.out.println(name + " : " + age);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
스레드의 기능 run()메소드가 실행되도록..Runnable로 만든 스레드객체는 start를 시켜주는 별도의
trigger용 Thread객체가 필요함
public class RunnableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonThread pt = new PersonThread();
pt.name="sam";
pt.age=20;
//스레드의 기능 run()메소드가 실행되도록..
//pt.start(); //error -- Runnable은 start()기능이 없음.
//pt.run(); //이작업은 Main Thread가 수행함
//Runnable로 만든 스레드객체는 start를 시켜주는 별도의
//trigger용 Thread객체가 필요함
Thread t= new Thread(pt); //생성자에 Runnable객체를 전달
t.start(); //대신 start.. 생성자로 받은 Runnable객체의 run()메소드가 발동됨
System.out.println("메인 스레드 작업");
//클래스를 만들어놓으면 언제든 new만 쓰면 여러개의 객체를 만들 수 있음
PersonThread pt2 = new PersonThread();
PersonThread pt3 = new PersonThread();
}
}
Runnable 인터페이스를 구현한 클래스의 이름을 매번 정하는것이 은근 짜증..
만약 그 클래스가 1번만 객체로 만들어서 사용될것이라면
별도의 클래스.java파일로 만드는 것이 더 짜증!! 비효율적임.
그래서 1회용 설계도를 이용하면 이를 해결함. 객체를 생성하면서 설계하는 문법을 이용할 것임
이름이 없는 클래스 -- 익명클래스 라고 부름'
Runnable r= new Runnable() {
public void run() {
System.out.println("Runnable.....");
}
};
Thread tt=new Thread(r);
tt.start();
//위 코드를 더 줄여서..
Thread ttt =new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("익명 클래스....");
}
});
ttt.start();
new Thread() {
public void run() {
System.out.println("스레드 상속한 익명클래스");
}
}.start();
}
}'JAVA' 카테고리의 다른 글
| Thread Control 예제 (0) | 2023.07.19 |
|---|---|
| Synchronized기능과 예제 (0) | 2023.07.19 |
| Thread(스레드) (0) | 2023.07.19 |
| Collection 클래스들 - Map (0) | 2023.07.18 |
| Collection 클래스들 - Set (0) | 2023.07.18 |