- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高效的非加锁的并发集合类 其它的一些并发集合的简单介绍: LinkedBlockingQueue 内部用链表实现的阻塞队列 ArrayBlockingQueue 内部用数组实现的阻塞队列 CopyOnWriteArrayList 线程安全的ArrayList,对于add, set等操作,用将原先的数组copy到新的来实现。避免了抛ConcurrentModificationException。 CopyOnWriteArraySet 和CopyOnWriteArrayList类似,只是它是Set 内置的高效的线程池 对于一个并发程序来说,线程池可说是其中一个比较重要的部分。尤其是对我们公司经常写的各种Socket Server来讲,其流程一般都是:接收客户端请求?处理逻辑?将结果返回给客户端。处理逻辑那段,经常要用到多线程(或多进程)。一般有以下两种实现: 1、每次请求都生成一个新的线程(或进程)去处理。 2、每次请求到来,从线程池(进程池)中取出一个,然后让其处理。 在以前,线程池只能是自己重新发明车轮去写,或者从网上找第三方的线程池(质量很难得到保证) 内置的高效的线程池 如果告诉大家在JDK中已经有了线程池,大家是否会觉得激动。没错,JDK1.5的确已经内置了高效的通用的线程池(真XX爽)。 一段示范代码: ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 1000, 30, TimeUnit.SECONDS, new ArrayBlockingQueueRunnable(3), new ThreadPoolExecutor.DiscardOldestPolicy()); while(接收请求) { threadPool.execute(new WorkerThread(XXX)); } 上面这段代码首先生成一个初始化为10个,最大为1000个线程的线程池,每次接收请求的时候,都从线程程中抽出一个线程来运行 内置的高效的线程池 Runnable,Callable和Future Runnable这个接口我们已经非常熟悉,它代表线程的执行,里面有一个run方法。但是它是没办法返回线程的执行结果的(当然,通过间接的方法可以)。JDK1.5新增了一个Callable接口,和Runnable类似,只是里面的call方法是可以返回线程的执行结果的。 Future这个接口则是描述异步运算的结果,里面的方法: cancel(boolean?mayInterruptIfRunning): 取消该次执行 get():等待并获取运算结果 get(long?timeout, TimeUnit?unit):等待一定时间获取运算结果 isCancelled():判断任务是否已经取消 isDone():判断任务是否已经完成 这三个接口构成了线程池的基础。 内置的高效的线程池 一个具体的例子: class MatchCounter implements CallableInteger { public MatchCounter(File directory, String keyword) { . . . } public Integer call() { . . . } // returns the number of matching files } FutureTaskInteger task = new FutureTaskInteger(counter); Thread t = new Thread(task); t.start(); System.out.println(task.get() + matching files.); 内置的高效的线程池 线程池的一个实现:ThreadPoolExecutor,它实现了线程池的各方面的功能,如: 执行某个任务(返回或不返回结果)。 初始化一定数量的线程,随着负荷的增大而新建线程,并控制线程池的最大容量。 在线程执行之前和之后执行一段代码。 删除某个任务。 关闭整个线程池。 获取线程池运行的各个运行期参数 ……,非常齐备,从此不再需要每次都重新发明车轮。 内置的高效的线程池 ThreadPoolExecutor的一些常用方法: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit
原创力文档


文档评论(0)