重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
java创建线程的方式有哪些?针对这个问题,今天小编总结这篇有关java创建线程的文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。
创新互联公司-专业网站定制、快速模板网站建设、高性价比博白网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式博白网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖博白地区。费用合理售后完善,十载实体公司更值得信赖。好处:
(1)与使用Runnable相比,Callable功能更强大些
(2)相比run()方法,可以有返回值
(3)方法可以抛出异常
(4)支持泛型的返回值
(5)需要借助FutureTask类,比如获取返回结果
Future接口:
1)可以对具体的Runnable\Callable任务的执行结果进行取消、查询是否完成、获取结果等
2)FutureTask是Future接口唯一的实现类
3)FutureTask同时实现了Runnable,Future接口。
【它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值】
//1.创建实现类
class NumThread implements Callable {
//2.重写call()方法
@Override
public Object call() throws Exception {
int sum=0;
for(int i=1;i<=100;i++){
if(i%2==0){
System.out.println(i);
sum+=i;
}
}
return sum;
}
}
public class ThreadNew {
public static void main(String[] args) {
//3.创建实现Callable接口的实例对象
NumThread numThread = new NumThread();
//4.将实现类的对象作为参数传递到FutureTask构造器,创建 FutureTask对象
FutureTask futureTask = new FutureTask(numThread);
//5.将FutureTask的对象作为参数传递到Thread类的构造器中,并调用start()
new Thread(futureTask).start();
//6.需要的话,可以借助FutureTask的对象进行一系列操作
try {
//get()返回值为FutureTask构造器参数Callable实现类重写的call()的返回值
Object sum = futureTask.get();
System.out.println("总和:"+sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
好处:
1)提高响应速度--减少创建新线程的时间
2)降低资源消耗--重复利用线程池中的线程,不需要每次都创建
3)便于线程管理:
corePoolSize:核心池的大小
maximumPoolSize:大线程数
keepAliveTime:线程没有任务时最多保持多长时间会终止
线程池相关API--ExecutorService和Executors
ExecutorService:真正的线程池接口,常见子类ThreadPoolExecutor
Executors:工具类、线程池的工厂类。用于创建并返回不同类型的线程池
综上所述,创建线程的两种方式各有各的优点,具体使用还要根据自己情况选择其中一种方式,如果想了解更多相关文章内容,欢迎关注创新互联行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。