0
点赞
收藏
分享

微信扫一扫

并发编程-Callable与Future模式

上一篇 <<<并发队列
下一篇 >>>Fork/Join框架


Callable与Future模式:Callable用来执行任务,Future用来获得结果。

Future提供的功能

Future常用方法

Callable的优势

核心代码

ExecutorService executor = Executors.newCachedThreadPool();
Future<Integer> future = executor.submit(new AddNumberTask());
System.out.println(Thread.currentThread().getName() + "线程执行其他任务");
Integer integer = future.get();
System.out.println(integer);
// 关闭线程池
if (executor != null) {
 executor.shutdown();
}

手写Callable与Future模式核心思路

public void run() {
    result = myCallable.call();
    // 唤醒阻塞线程
    LockSupport.unpark(curThread);
    // 也可以使用下列方式唤醒
    /*synchronized (lock) {
        lock.notify();
    }*/
}

/**
 * 结果返回
 * @return
 */
public V get() {
    // 获取结果,则直接返回
    if (result != null) {
        return result;
    }
    // 获得当前线程
    curThread = Thread.currentThread();
    // 未获得结果,则先阻塞,等run方法执行完成调用unpark后,自动继续执行
    LockSupport.park(curThread);
    // 也可以使用下列方式阻塞
    /*synchronized (lock) {
        try {
            lock.wait();
        } catch (Exception e) {

        }
    }*/
    return result;
}
MyTask<String> myTask = new MyTask<>(new MyCallableImpl());
new Thread(myTask).start();
String s = myTask.get();
System.out.println(s);

相关文章链接:
<<<多线程基础
<<<线程安全与解决方案
<<<锁的深入化
<<<锁的优化
<<<Java内存模型(JMM)
<<<Volatile解决JMM的可见性问题
<<<Volatile的伪共享和重排序
<<<CAS无锁模式及ABA问题
<<<Synchronized锁
<<<Lock锁
<<<AQS同步器
<<<Condition
<<<CountDownLatch同步计数器
<<<Semaphore信号量
<<<CyclicBarrier屏障
<<<线程池
<<<并发队列
<<<Fork/Join框架
<<<Threadlocal
<<<Disruptor框架
<<<如何优化多线程总结

举报

相关推荐

0 条评论