java 多线程复制_Java总结(十一)——通过Callable接口实现多线程,生产者消费者问题,多线下载(复制)文件...

一.通过Callable接口实现多线程

1.Callable接口介绍:

(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法

(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象

2.Callable接口实现多线程的应用场景

(1)当父线程想要获取子线程的运行结果时

3.使用Callable接口实现多线程的步骤

(1)第一步:创建Callable子类的实例化对象

(2)第二步:创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中

(注意:FutureTask实现了Runnable接口和Future接口)

(3)第三步:实例化Thread对象,并在构造方法中传入FurureTask对象

(4)第四步:启动线程

例1(利用Callable接口实现线程):

利用Callable接口创建子线程类:

packagecall;

importjava.util.concurrent.Callable;

/*

* 实现Callable接口创建子线程,指明范型为返回的数据类型

* */

publicclassCallDemoimplementsCallable {

@Override

publicString call()throwsException {

Stringth_name= Thread.currentThread().getName();

System.out.println(th_name+"遭遇大规模敌军突袭...");

System.out.println(th_name+"迅速变换阵型...");

System.out.println(th_name+"极速攻杀敌军...");

return"敌军损失惨重,我军大获全胜";

}

}

实线程类:

packagecall;

importjava.util.concurrent.ExecutionException;

importjava.util.concurrent.FutureTask;

publicclassTestCallable {

publicstaticvoidmain(String[]args) {

CallDemocl=newCallDemo();// 实例化Callable子类对象

FutureTaskft=newFutureTask(cl);// 实例化FutureTask对象,并将Callable子类对象传入FutureTask的构造方法中

newThread(ft,"李存孝部队——>").start();// 启动线程

Thread.currentThread().setName("李存勖部队——>");// 设置父线程名

try{

System.out.println(Thread.currentThread().getName() +"休整5000ms");

Thread.sleep(5000);

}catch(InterruptedExceptione) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() +"休整完毕..");

try{

Stringstr=ft.get();// 利用FutureTask对象调用get()方法获取子线程的返回值

System.out.println(Thread.currentThread().getName() +"获取友军消息"

+str);

}catch(InterruptedException | ExecutionExceptione) {

e.printStackTrace();

}

}

}

运行结果:

李存勖部队——>休整5000ms

李存孝部队——>遭遇大规模敌军突袭...

李存孝部队——>迅速变换阵型...

李存孝部队——>极速攻杀敌军...

李存勖部队——>休整完毕..

李存勖部队——>获取友军消息敌军损失惨重,我军大获全胜

例2(匿名类部类实现Callable接口创建子线程):

匿名类部类实现Callable接口创建子线程类并实现:

packagecall;

importjava.util.concurrent.Callable;

importjava.util.concurrent.ExecutionException;

importjava.util.concurrent.FutureTask;

//匿名类部类实现Callable接口创建子线程

publicclassAnonyCallable {

publicstaticvoidmain(String[]args) {

Callablecl=newCallable() {

@Override

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值