스레드 생성 방법(Thead, Runnable, Callable)
11567 단어 라인 관련
1: Thread 클래스 상속
public class ThreadDemo {
// 1. Thread run
class MyThread extends Thread{
@Override
public void run() {
super.run();
System.out.println(" ");
}
}
public static void main(String[] args) {
// 2 MyThread
ThreadDemo.MyThread myThread=new ThreadDemo().new MyThread();
//3.
myThread.start();
}
}
2: Runnable 인터페이스 구현
public class ThreadDemoRunable {
// 1. Runnable
class MyRunable implements Runnable{
@Override
public void run() {
System.out.println( Thread.currentThread().getName()+" ");
}
}
public static void main(String[] args) {
//2. Runnable
ThreadDemoRunable.MyRunable myRunable=new ThreadDemoRunable().new MyRunable();
//3. Thread
Thread thread=new Thread(myRunable);
thread.setName("runnable ");
//4.
thread.start();
}
}
3: Callable 인터페이스 구현
public class ThreadDemoCalladle {
//1 Callable
class myCallable implements Callable<Integer>{
@Override
public Integer call() throws Exception {
return 100;
}
}
public void startThreadByCallable(){
//2. FutureTask
FutureTask futureTask=new FutureTask(new myCallable());
//3.
new Thread(futureTask).start();
try {
//4.
System.out.println(futureTask.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// 5.
new ThreadDemoCalladle().startThreadByCallable();
}
}
메서드
차이점
계승
실현은 간단하지만 다계승은 실현할 수 없다
실행
실현도 복잡하지 않고 단일 계승의 단점을 피하고 데이터 공유
Callable 구현
실현도 약간 복잡하고 단일 계승의 단점을 피하며 데이터 공유는 Runnable에 비해 되돌아오는 값이 있다