温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Future和Callable怎么使用

发布时间:2022-03-17 17:11:35 来源:亿速云 阅读:151 作者:iii 栏目:web开发

这篇“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怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI