
Java编程开发创建线程的方式
实现多线程的3种方式
继承Thread类
看jdk源码可以发现,Thread类其实是实现了Runnable接口的一个实例,继承Thread类后需要重写run方法并通过start方法启动线程。
继承Thread类耦合性太强了,因为java只能单继承,所以不利于扩展。
实现Runnable接口
通过实现Runnable接口并重写run方法,并把Runnable实例传给Thread对象,Thread的start方法调用run方法再通过调用Runnable实例的run方法启动线程。
所以如果一个类继承了另外一个父类,此时要实现多线程就不能通过继承Thread的类实现。
实现Callable接口
通过实现Callable接口并重写call方法,并把Callable实例传给FutureTask对象,再把FutureTask对象传给Thread对象。它与Thread、Runnable最大的不同是Callable能返回一个异步处理的结果Future对象并能抛出异常,而其他两种不能。
示例代码
importjava.util.concurrent.Callable;
importjava.util.concurrent.FutureTask;
*Createdbybinzhangon2019/3/23.
publicclassTestThread{
staticclassThread1extendsThread{
@Override
publicvoidrun(){
System.out.println("Thread1running...");
}
}
staticclassThread2implementsRunnable{
@Override
publicvoidrun(){
System.out.println("Thread2running...");
}
}
staticclassThread3implementsCallable{
@SuppressWarnings("unchecked")
@Override
publicTcall()throwsException{
System.out.println("Thread3running...");
return(T)newString("hellocallable...");
}
}
publicstaticvoidmain(String[]args)throwsException{
Thread1t1=newThread1();
Threadt2=newThread(newThread2());
FutureTaskft=newFutureTask<>(new>());
Threadt3=newThread(ft);
t1.start();
t2.start();
t3.start();
System.out.println(ft.get());
}
}
输出
Thread1running...
Thread2running...
Thread3running...
hellocallable...
java编程语言从创建一直延续到现在,始终是大多数程序员追捧的编程语言之一。对于java语言的适应性以及实用性是不言而喻的。因此,IT的小白大部分也就选择了java编程的培训课程。西安java培训从基础开始授课,结合项目实操练习。学习java编程培训就到西安鸥鹏java培训班,免费试听课程,感受java带给你的独特魅力。