public class Web12306 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 方式 1 继承Thread类,重写run方法
ThreadTest01 test01 = new ThreadTest01();
test01.start();
// 方式2 实现Runnable接口,重写run方法 使用静态代理调用线程
ThreadTest02 test02 = new ThreadTest02();
Thread thread = new Thread(test02);
thread.start();
// 方式3 实现Callable接口,重写call方法
ExecutorService service = Executors.newFixedThreadPool(1);
ThreadTest03 test03 = new ThreadTest03();
Future<Integer> result = service.submit(test03);
//System.out.println(result); 返回的是 java.util.concurrent.FutureTask@154174f9
Integer num=0;
num =result.get();
System.out.println(num);
service.shutdown();
}
}
// 多线程的三种方式
class ThreadTest01 extends Thread{
@Override
public void run() {
for(int i =0;i<20;i++){
System.out.println("ThreadTest01");
}
}
}
class ThreadTest02 implements Runnable{
@Override
public void run() {
for(int i =0;i<20;i++){
System.out.println("ThreadTest02");
}
}
}
class ThreadTest03 implements Callable<Integer>{
Integer in = 10;
@Override
public Integer call() throws Exception {
for(int i =0;i<100;i++){
System.out.println("ThreadTest03");
/*if(i==20){
System.out.println(in);
return this.in;*/
}
//}
return in;
}
}
优缺点比较:
继承Thread类:不利于再继承其他类;
实现Runnable接口:没有返回值,不能抛出异常;优点,可以使用多个代理代理同一个对象。
实现Callable接口:代码略繁琐。优点有返回值
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。