2017/6/29杂记

ThreadPool用法与优势

合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。

我们可以通过ThreadPoolExecutor来创建一个线程池。

new  ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);

我们可以使用execute提交的任务,但是execute方法没有返回值,所以无法判断任务是否被线程池执行成功。通过以下代码可知execute方法输入的任务是一个Runnable类的实例。

threadsPool.execute(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
            }
        });

我们也可以使用submit 方法来提交任务,它会返回一个future,那么我们可以通过这个future来判断任务是否执行成功,通过future的get方法来获取返回值,get方法会阻塞住直到任务完成,而使用get(long timeout, TimeUnit unit)方法则会阻塞一段时间后立即返回,这时有可能任务没有执行完。

Future<Object> future = executor.submit(harReturnValuetask);
try {
     Object s = future.get();
} catch (InterruptedException e) {
    // 处理中断异常
} catch (ExecutionException e) {
    // 处理无法执行任务异常
} finally {
    // 关闭线程池
    executor.shutdown();
}

java NIO 和java IO转自:http://blog.csdn.net/zhouhl_cn/article/details/6568119

传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力。

小量的线程如何同时为大量连接服务呢,答案就是就绪选择。这就好比到餐厅吃饭,每来一桌客人,都有一个服务员专门为你服务,从你到餐厅到结帐走人,这样方式的好处是服务质量好,一对一的服务,VIP啊,可是缺点也很明显,成本高,如果餐厅生意好,同时来100桌客人,就需要100个服务员,那老板发工资的时候得心痛死了,这就是传统的一个连接一个线程的方式。

老板是什么人啊,精着呢。这老板就得捉摸怎么能用10个服务员同时为100桌客人服务呢,老板就发现,服务员在为客人服务的过程中并不是一直都忙着,客人点完菜,上完菜,吃着的这段时间,服务员就闲下来了,可是这个服务员还是被这桌客人占用着,不能为别的客人服务,用华为领导的话说,就是工作不饱满。那怎么把这段闲着的时间利用起来呢。这餐厅老板就想了一个办法,让一个服务员(前台)专门负责收集客人的需求,登记下来,比如有客人进来了、客人点菜了,客人要结帐了,都先记录下来按顺序排好。每个服务员到这里领一个需求,比如点菜,就拿着菜单帮客人点菜去了。点好菜以后,服务员马上回来,领取下一个需求,继续为别人客人服务去了。这种方式服务质量就不如一对一的服务了,当客人数据很多的时候可能需要等待。但好处也很明显,由于在客人正吃饭着的时候服务员不用闲着了,服务员这个时间内可以为其他客人服务了,原来10个服务员最多同时为10桌客人服务,现在可能为50桌,60客人服务了。

这种服务方式跟传统的区别有两个:

1、增加了一个角色,要有一个专门负责收集客人需求的人。NIO里对应的就是Selector。

2、由阻塞服务方式改为非阻塞服务了,客人吃着的时候服务员不用一直侯在客人旁边了。传统的IO操作,比如read(),当没有数据可读的时候,线程一直阻塞被占用,直到数据到来。NIO中没有数据可读时,read()会立即返回0,线程不会阻塞。

NIO中,客户端创建一个连接后,先要将连接注册到Selector,相当于客人进入餐厅后,告诉前台你要用餐,前台会告诉你你的桌号是几号,然后你就可能到那张桌子坐下了,SelectionKey就是桌号。当某一桌需要服务时,前台就记录哪一桌需要什么服务,比如1号桌要点菜,2号桌要结帐,服务员从前台取一条记录,根据记录提供服务,完了再来取下一条。这样服务的时间就被最有效的利用起来了。

				
时间: 2024-10-16 13:22:04

2017/6/29杂记的相关文章

【第三组】冲刺会议 2017.7.29

冲刺会议 日期:2017.7.29 开发小组:Geomestry 冲刺经理:程立智 成员: 程立智 李明伦 郑昊 蔡镇泽 温志成 汪涵 成员:程立智 完成工作:实现全局多语言,各种界面大小自适应 ,添加系统推送 所遇问题: 界面难以跟随设置立即更新 下一步工作:实现成就系统,解决大家最后测试出的各种系统bug 成员:李明伦 完成工作:写中英文关卡说明 和 实现关卡初始条件 所遇问题: 个别关卡描述不明确 下一步工作:测试程序在低端笔记本上面是否有运行不良状况 成员:郑昊 完成工作:重构各种界面的

【2017.09.29 星期五 关于c++瞎侃】

c++中最重要的语法特征就是 类 了,通过它,程序员可以自定义自己的数据类型. c++中的类包含 数据成员 也 包含 函数成员. C++语言主要的一个设计目标 就是让程序员自定义的的数据类型向 内置类型一样 好用. 基于此, 标准c++库 实现了丰富的类和函数. 野心很大 [2017.09.29 星期五 关于c++瞎侃]

2017/7/29 SQL PASS台中首发,SQL SERVER 2017 0n Linux ,数据库规划设计

这次我们一次提供两个场次让大家大大的满足 台中的朋友千万不要错过这难得的机会喔! 活动地点:逢甲大学资讯电机馆418教室? 活动时间:7/29 13:00- 17:00? 费用:全天250 活动场次:13:00~15:00? 主题:SQL SERVER 2016 sp1 新功能以及改变与SQL SERVER 2017 0n Linux 讲师:宋明远(Isaac),程品端 (Egg)? 报名网址:https://goo.gl/forms/Xyw0ZliAWLhSzIP72 活动场次:15:00 ~

2017.06.29数据挖掘基础概念第二.三章

第二章21.研究的属性类型标称属性:值是一些符号或事物的名称,代表某种类型.编码或状态二元属性:是一种标称属性,只有两个类别或状态,又称布尔属性序数属性:是一种属性,其可能的值之间具有有意义的序或秩评定,但是相续值之间的差是未知的数值属性:是定量的,即他是可度量的量,可用整数或实数值表示(区间和比率标度)22.数据散布常见的度量量(数据如何分散的方法/识别离群点)极差 四分位数.四分位数极差.五数概括图.方差和标准差23.审视数据的图形条形.饼图.线图.分位数图.分位数-分位数图.直方图和散点图

2017/9/29模拟赛

T1.多米诺骨牌(card)小 Z 最近买了很多很多的多米诺骨牌,他选出了其中的一些排成了一排,并且准备从右到左碰倒这些骨牌.每个骨牌有一个坐标 xi(>=1)和一个大小 yi(>=1),倒下时将会碰倒坐标区间位于[xi-yi,xi)内的所有骨牌.当然没有两个骨牌有相同的坐标, 并且小 Z 规定坐标大的更靠右.但是他发现他买的骨牌太巨了,所以在倒下的时候会将所有碰倒的骨牌破坏掉,被破坏掉的骨牌就无法使用了,并且不会倒下.得知这个消息的小 Z 十分惊讶,他想知道如果还按刚才这种方法从右到左碰倒所

[2017.11.29]BZOJ4825[Hnoi2017]单旋

1 #include<bits/stdc++.h> 2 #define M 100010 3 #define RG register 4 #define inf 0x3f3f3f3f 5 using namespace std; 6 bool rev[M]; 7 set<int> tr; 8 set<int>::iterator it; 9 int m,rt,tp,big,cnt,cur,dau,dep,loc,sml,sum,tmp,c[M],fa[M],sz[M],

2017.12.29 3周5次课

三周第五次课(12月29日) 4.5/4.6 磁盘格式化  4.7/4.8 磁盘挂载 4.9 手动增加swap空间 4.5/4.6 磁盘格式化 centos7系统支持的文件格式如下: 在/etc/filesystems里查看 "xfs"是centos7默认的文件系统,之前的版本都是"ext" 命令[mke2fs]:格式化成ext2/ext3/ext4的文件系统 常用的选项有(mkfs.ext2/ext3/ext4也适用): '-b' 分区时设定每个数据区块占用空间大

Work 2(演讲类) (2017.06.29)

2017.06.29数据挖掘基础概念第十,十一章

第十章63.什么是聚类分析 一个把数据对象划分成子集的过程.每一个子集市一个簇,使得簇中的对象彼此相似,但与其他簇中的对象不相似.由聚类分析产生的簇的集合称做一个聚类.64.数据挖掘对聚类的要求 1.可伸缩性 2.处理不同属性类型的能力 3.发现任意形状的簇 4.对于确定输入参数的领域知识的要求 5.出来噪声数据的能力 6.增量聚类和对输入次序不敏感 7.聚类高维数据的能力 8.基于约束的聚类 9.可解释性和可用性 10.划分准则 11.簇的分离性 12.相似性度量 13.聚类空间65.基本聚类