并发包CallableAndFuture

/**
 *
 * @描述: Callable   Future
 *
 *    程序运行一个线程,线程运行结束后,我们可以获取另一个线程的结果
 *
 * @作者: Wnj .
 * @创建时间: 2017年5月16日 .
 * @版本: 1.0 .
 */
public class CallableAndFuture {

    /**
     * 单个任务
     * <功能详细描述>
     */
    public static void single() {
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        /**
         * 需要返回结果的就使用submit
         */
        Future<String> future = threadPool.submit(new Callable<String>() {
            public String call() throws Exception {
                Thread.sleep(2000);
                return "hello";
            };
        });
        System.out.println("等待拿到结果");
        try {
            System.out.println("拿到结果" + future.get());
            // System.out.println("拿到结果" + future.get(1,TimeUnit.SECONDS));//1秒钟内必须返回
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 多个任务
     * <功能详细描述>
     */
    public static void array() {
        ExecutorService threadPool2 = Executors.newFixedThreadPool(10);
        /**
         * 一定就提交一组Callable任务,只要一个任务完成了就能获取到结果
         */
        CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2);
        for (int i = 1; i <= 10; i++) {
            final int seq = i;
            completionService.submit(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    Thread.sleep(new Random().nextInt(5000));
                    return seq;
                }
            });
        }
        for (int i = 0; i < 10; i++) {
            try {
                System.out.println(completionService.take().get());
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        array();
    }
    
时间: 2024-11-09 22:48:33

并发包CallableAndFuture的相关文章

9.并发包非阻塞队列ConcurrentLinkedQueue

jdk1.7.0_79  队列是一种非常常用的数据结构,一进一出,先进先出. 在Java并发包中提供了两种类型的队列,非阻塞队列与阻塞队列,当然它们都是线程安全的,无需担心在多线程并发环境所带来的不可预知的问题.为什么会有非阻塞和阻塞之分呢?这里的非阻塞与阻塞在于有界与否,也就是在初始化时有没有给它一个默认的容量大小,对于阻塞有界队列来讲,如果队列满了的话,则任何线程都会阻塞不能进行入队操作,反之队列为空的话,则任何线程都不能进行出队操作.而对于非阻塞无界队列来讲则不会出现队列满或者队列空的情况

Linux服务器大量向外发包问题排查

最近Linux redhat 6.5 APP 业务系统,向外大量发送流量,不断建立tcp连接,目标地址是美国的一个IP,估计被当成肉鸡了,比较悲惨,直接飞向IDC机房,防火墙显示这个APP服务器tcp连接很多每秒10W个, 从服务器上使用命令sar -n DEV 2 10 ,确实出现大量发包的问题,(下边是正常的,异常的情况eth0txpck/s 10000左右了) 先进行限速或者拔掉网线: 开始之前,先要清除 eth0所有队列规则 tc qdisc del dev eth0 root 2> /

Java并发包源码分析

并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善.现代的PC都有多个CPU或一个CPU中有多个核,是否能合理运用多核的能力将成为一个大规模应用程序的关键. Java基础部分知识总结点击Java并发基础总结.Java多线程相关类的实现都在Java的并发包concurrent,concurrent包主要包含3部分内容,第一个是atomic包,里面主要是一些原子类,比如AtomicInteger.

JDK5线程并发包使用整理

JDK5线程并发包 1)AtomicInteger 使用原子方式更新int值 2)创建线程池 a)创建固定大小的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(10);//创建一个有10个线程的线程池 b)创建缓存线程池 Executors.newCachedThreadPool(); 创建一个可根据需要创建新线程的线程池,可自动调整线程的多少 c)创建单线程的线程池 Executors.newSingleThreadE

Java集合及concurrent并发包总结

1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对. Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持. List最常用的实现类有:ArrayList.LinkedList.Vector及Stack:Set接口常用的实现类有:HashSet.TreeSet. 1.1 ArrayList ArrayList基于

高效简易websocket服务开发包beetle

websocket的主要是为了解决在web上应用长连接进行灵活的通讯应用而产生,但websocket本身只是一个基础协议,对于消息上还不算灵活,毕竟websocket只提供文本和二进制流这种基础数据格式.在实际应用则更偏向于对象消息的处理,而在这基础上更希望集成一系列的消息路由机制来解决消息处理上的问题.为了解决以上问题beetle针对websocket进行了一些高层次的封装,让服务端处理消息变得更简单灵活.以下通过不同的示例介绍Beetle websocket开发包的简易性. hello wo

数据库发包

现在就来看看数据库发包模式 这个用到了抽象工厂模式 其实经理的那个差不多都是注册具体工厂到抽象工厂,只是这里不是抽象工厂而是PktFactoryMgr功能和抽象工厂差不多 { #define __REGISTER_DB_PKT_CREATEFUNCTION(DBOptClassType) \ Register<DBOptClassType>(PktSingleFactory<DBOptClassType>::GetOrCreateInstance()); __REGISTER_DB

GS给客户单发包以及m_queGcWait(所有GC共享)

GS给客户单发包以及m_queGcWait(所有GC共享) send_stat BaseChannel::SendCmd(int nCmd, void* pData, int nLen) { Protocol Ptl; Ptl.cmd_type = nCmd; Ptl.content = pData; Ptl.size = nLen; void* tmpBuffer = ms_pSendBuff2C; if (nLen > __GC_MAX_SEND_BUFF_LEN) { ShuiHu::Ge

手机视频开发包

概述: 手机视频开发包是面向集成或软件开发商使用,用于开展手机视频相关的产品开发和系统集成. 开发包提供手机端音视频采集.编码.压缩.音视频传输等功能:通过与后端移动视频直播服务器对接,实现手机视频即拍即传.手机视频直播.开发包提供视频拍摄位置信息,视频描述采集和发布:开发包提供拍摄端和服务器端的文字和语音的对讲等功能. 当前版本的手机视频开发包采集端支持iOS和Android平台. 后端的视频服务器通过标准协议与集成商或软件开发商的业务系统进行对接,从而形成手机端到服务器端的实时移动视频应用.