import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class ThreadTester {
public static void main(String[] args) {
// 1-继承Thread类
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
// 2-实现Runnable接口
MyRunableImpl runable = new MyRunableImpl();
new Thread(runable).start();
new Thread(runable).start();
// 3-实现Callable接口
FutureTask<String> futureTask = new FutureTask<>(new MyCallableImpl());
new Thread(futureTask).start();
try {
String result = futureTask.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
// 4-使用ExecutorService实现
ExecutorService poll = Executors.newFixedThreadPool(5);
List<Future<String>> resuls = new ArrayList<>();
for (int i = 0; i < 5; i++) {
MyCallableImpl callable = new MyCallableImpl();
Future<String> future = poll.submit(callable);
resuls.add(future);
}
poll.shutdown();
resuls.forEach((result) -> {
String str = null;
try {
str = result.get();
System.out.println(str);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
});
}
}
class MyCallableImpl implements Callable<String> {
@Override
public String call() throws Exception {
return Thread.currentThread().getName() + " run!";
}
}
class MyRunableImpl implements Runnable {
private int num = 10;
@Override
public synchronized void run() {
for (int i = 0; i < 10 && this.num >= 0; i++) {
System.out.println(Thread.currentThread().getName() + " num:" + this.num--);
}
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println(this.getName() + " run!");
}
}