大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇“Future和Callable怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Future和Callable怎么使用”文章吧。
在平果等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站设计、成都外贸网站建设 网站设计制作按需开发网站,公司网站建设,企业网站建设,品牌网站建设,网络营销推广,外贸营销网站建设,平果网站建设费用合理。
一、先说明启动线程的两种方式:
1、 继承Thread,重载run方法,执行start方法
Class MyThread extends Thread{
@Override
Void run(){
}
}
new MyThread().start();
2、 实现Runnable接口
Class MyTask implements Runnable {
Void run(){}
}
new Thread( new MyTask()).start();
这里顺便说下 new MyThread().start()和new MyThread().run();执行的区别,前者会启动一个线程执行run方法,后者是在本线程中执行run方法
二、再明确几个概念:
Callable接口和Runnable接口一样,也可通过实现该接口启动线程,但是Callable接口的run方法有返回值。
Future接口,相当于是对Callable进行了封装:
public interface Future {
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws InterruptedException, ExecutionException;
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
FutureTask是Future的一个实现,使用实例:
FutureTask futureTask = new FutureTask(new Callable(){});
new Thread(futureTask).start();
MyResult r = futureTask.get();
执行start方法后会执行Callable的run方法
调用futureTask 的get方法会执行,并判断是否执行完,如果run执行完了直接返回结果,否则的话会awaitDone阻塞,当start方法中的Callable方法执行完后会判断有没有阻塞的线程有的话会唤醒(LockSupport.parkNanos阻塞,LockSupport.unpark(thread)唤醒);注意当有多个线程阻塞的时候,是以链表形式存储的,唤醒的时候也是依次唤醒
以上就是关于“Future和Callable怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。