- 浏览: 153907 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lanhaitun1991:
亲,其实你这里介绍的方法有一个最大的问题:如果放入队列之后,但 ...
分布式事务 -
lp385267935:
不错 很好用~3Q
jsonlib json-->object,忽略object中没有的属性 -
xiebo1983:
http://www.sqkoo.com/show/detai ...
mysql latin1乱码 -
envy2002:
当然可以了,tomcat中源码你可以看看,只要“欺骗”过去to ...
tomcat中的长连接 -
newSaa:
问一下,可以在 tomcat 建立tcp 长连接吗?
tomcat中的长连接
今天决定学习一下java.concurrent包,以这个文章为基础
http://www.yybean.com/examples-of-multi-threaded-framework-java-util-concurrent
1.Executors
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // only two threads ExecutorService exec = Executors.newFixedThreadPool(5); long begin=System.currentTimeMillis(); long begin1=System.currentTimeMillis(); for(int index = 0; index < 100; index++) { long end=System.currentTimeMillis(); System.out.println("cha is "+(end-begin)); begin=end; Runnable run = new Runnable() { public void run() { long time = (long) (Math.random() * 1000); System.out.println("Sleeping " + time + "ms"); try { Thread.sleep(time); } catch (InterruptedException e) { } } }; exec.execute(run); } // must shutdown long end1=System.currentTimeMillis(); System.out.println("GGGGGGG "+(end1-begin1)); exec.shutdown(); } }
输出结果:
cha is 0
cha is 16 cha is 0 cha is 0 cha is 0 Sleeping 805ms Sleeping 782ms Sleeping 715ms Sleeping 110ms cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 Sleeping 66ms cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 cha is 0 GGGGGGG 16 Sleeping 771ms Sleeping 53ms Sleeping 305ms Sleeping 132ms Sleeping 400ms Sleeping 0ms Sleeping 555ms Sleeping 943ms Sleeping 612ms Sleeping 744ms Sleeping 615ms Sleeping 464ms Sleeping 980ms Sleeping 431ms Sleeping 154ms Sleeping 908ms Sleeping 792ms Sleeping 884ms Sleeping 943ms Sleeping 555ms Sleeping 18ms Sleeping 529ms Sleeping 237ms Sleeping 988ms Sleeping 222ms Sleeping 693ms Sleeping 97ms Sleeping 159ms Sleeping 517ms Sleeping 986ms Sleeping 923ms Sleeping 393ms Sleeping 989ms Sleeping 500ms Sleeping 855ms Sleeping 119ms Sleeping 638ms Sleeping 179ms Sleeping 795ms Sleeping 846ms Sleeping 770ms Sleeping 820ms Sleeping 735ms Sleeping 668ms Sleeping 938ms Sleeping 797ms Sleeping 738ms Sleeping 355ms Sleeping 8ms Sleeping 812ms Sleeping 409ms Sleeping 942ms Sleeping 623ms Sleeping 666ms Sleeping 940ms Sleeping 530ms Sleeping 405ms Sleeping 290ms Sleeping 838ms Sleeping 953ms Sleeping 473ms Sleeping 67ms Sleeping 263ms Sleeping 836ms Sleeping 503ms Sleeping 747ms Sleeping 498ms Sleeping 534ms Sleeping 341ms Sleeping 138ms Sleeping 457ms Sleeping 421ms Sleeping 396ms Sleeping 80ms Sleeping 269ms Sleeping 4ms Sleeping 399ms Sleeping 151ms Sleeping 950ms Sleeping 371ms Sleeping 859ms Sleeping 946ms Sleeping 862ms Sleeping 560ms Sleeping 528ms Sleeping 754ms Sleeping 178ms Sleeping 545ms Sleeping 419ms Sleeping 956ms Sleeping 857ms Sleeping 648ms Sleeping 527ms Sleeping 469ms Sleeping 674ms
可见这个 主线程一股脑儿,一下全把这一百个线程放到 excutor的池中,然后两个两个执行。并不会,两个执行完了,再进来两个进行消费。
文章也说了:在for循环的过程中,会等待线程池有空闲的线程,所以主线程会阻塞的。为了解决这个问题,一般启动一个线程来做for循环,就是为了避免由于线程池满了造成主线程阻塞。不过在这里我没有这样处理。[重要修正:经过测试,即使线程池大小小于实际线程数大小,线程池也不会阻塞的,这与Tomcat的线程池不同,它将Runnable实例放到一个“无限”的BlockingQueue中,所以就不用一个线程启动for循环,Doug Lea果然厉害]
经确实,是正确的。
浅析Java中CountDownLatch用法
http://www.cnblogs.com/shiyanch/archive/2011/04/04/2005233.html
发表评论
-
java NIO
2013-05-02 16:51 791... -
Thread.interrupt
2013-04-10 21:25 1015Thread.interrupt(),就是置状态。 ... -
分布式事务2
2013-02-19 14:16 10231.jar包,应该用带有二步提交事务的驱动,mysq ... -
分布式事务
2013-02-17 17:40 2405... -
spring SimpleFormController流程
2013-02-08 11:43 1782最近在学习spring mvc. 网上了收集了一下Simp ... -
ASM 使用的一个范例。
2012-10-19 14:05 4592现在开始研究Junit,试图通过Junit来改善自己的编 ... -
谷歌面试题一枚
2012-10-16 09:46 1293机械开发代码久了,看了看一些面试题,可以活跃大脑,最近网上看了 ... -
jsonlib json-->object,忽略object中没有的属性
2012-09-21 09:42 10010Java code skel ... -
java并发编程pdf纠错
2012-08-14 09:21 0java并发编程实践里面讲究CAS算法,其中这个 算法comp ... -
5分钟内搞定 Tomcat 的 SSL 配置
2012-07-02 11:52 9035分钟内搞定 Tomcat 的 SSL 配置(转) ... -
java nio测试
2012-06-29 12:00 995import java.io.IOException; ... -
屌丝comet
2012-06-26 09:29 872很显然tomcat能和浏览器之间实现长连接还是不错的,看了ib ... -
eclipse 远程调试 web程序
2012-05-31 16:37 992需要远程调试web程序,没办法啊。 1. 需要把%TO ... -
tomcat停止
2012-04-18 12:50 0#!/bin/sh #kill tomcat pid ... -
json转java对象
2012-04-10 20:54 1057String json = "{\&qu ... -
bonecp源码陌生类选读
2012-03-01 17:16 837今天在学习bonecp源码,看到了好多从来没有用过的类,现在记 ... -
TOMCAT源码分析(消息处理)(转)
2012-02-28 14:06 788TOMCAT源码分析(消息处理) http://bl ... -
tomcat流程启动图
2012-02-28 10:56 971tomcat6从启动到监听8080端口来处理请求的过程,如图: ... -
tomcat源码的几个问题
2012-02-24 11:31 9631. tomcat如何区分静态页面.html .jpg 和.j ... -
java 中的classloader
2012-02-23 11:35 959java中的.class文件必须有classl ...
相关推荐
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
良葛格的Java 5.0学习笔记,作为一位学习者的经验总结,对于初学者来说无疑是一份宝贵的资源。以下是对这些笔记中可能涵盖的知识点的详细解释: 1. **Generics(泛型)**:Java 5.0最大的变化之一就是引入了泛型,...
Java安全学习笔记主要涵盖以下几个核心领域: 1. **Java安全模型**:Java的安全模型是其设计的核心部分,旨在保护系统免受恶意代码的攻击。它基于沙箱模型,限制了未经许可的代码对系统资源的访问。Java Security ...
《Java JDK 6 学习笔记》这本书很可能是为了帮助读者深入理解和掌握这个版本的Java编程语言及其开发环境。以下是一些关键知识点的详细说明: 1. **自动装箱与拆箱**:Java 6中引入了自动装箱和拆箱功能,使得基本...
以下是对"Javajdk5学习笔记"中可能包含的知识点的详细解析: 1. **自动装箱与拆箱**:JDK 5引入了自动装箱和拆箱功能,使得基本类型和它们对应的包装类之间可以无缝转换,提高了代码的简洁性。例如,`Integer i = ...
本篇学习笔记将深入解析Java线程池的框架、结构、原理以及相关源码,帮助读者全面理解线程池的工作机制。 1. 线程池模块结构 线程池框架分为多层结构,其中包括核心实现类、辅助类和接口等组件。例如,`sun.nio.ch....
Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...
本篇将围绕“Java+JDK6学习笔记”展开,探讨在JDK6环境下Java编程的核心知识点。 1. **JDK6概述**:JDK6是Oracle公司于2006年发布的Java平台标准版(Java SE)的一个重要版本,它的全称是Java SE 6,带来了许多新...
3. **同步机制**:Java提供了多种同步机制,如`synchronized`关键字、`volatile`关键字、`Lock`接口(包括`ReentrantLock`可重入锁)和`java.util.concurrent`包下的工具类。这些机制用于解决多线程环境下的数据一致...
可重入锁是Java.util.concurrent.locks包下的ReentrantLock类,支持公平锁和非公平锁,具有比synchronized更细粒度的控制。它提供tryLock()方法,可以在无法获取锁时立即返回,而不是等待。 3. **ThreadLocal**: ...
Java JDK 5.0是Java开发工具包的一个重要版本,由Sun Microsystems(后被Oracle收购)于2004年发布。...通过阅读“良葛格Java JDK 5.0学习笔记”,读者可以系统地学习和掌握这些内容,进一步提升自己的Java编程技能。
【Java学习记录】是本次压缩包文件的主题,它暗示了我们即将探讨的是关于Java编程语言的学习过程和经验总结。在编程领域,Java以其跨平台、面向对象和强大的库支持而广受欢迎,是初学者和专业开发者的重要选择。下面...
本资源"java学习笔记JDK6课件和课本代码"是一个针对初学者和有一定基础的开发者的学习资料集合,它涵盖了JDK6版本的相关内容。 JDK6是Java历史上的一个重要版本,发布于2006年,引入了许多新特性,包括增强的Swing...
《良葛格java jdk 5.0学习笔记》是一份深入探讨Java编程语言核心特性的资源,特别针对Java Development Kit (JDK) 5.0版本。这份笔记旨在帮助初学者和有经验的开发者更好地理解和掌握Java 5.0的新特性,提升编程技能...
这份"良葛格java jdk 5.0学习笔记"是针对这个版本的重要学习资源,适合初学者和有一定经验的开发者参考。 1. **泛型**:Java 5.0引入了泛型,允许在定义类、接口和方法时指定参数类型,增强了类型安全,避免了运行...
《良葛格Java JDK 5.0学习笔记》是一份深度探讨Java开发工具包(JDK)5.0版本的详尽资料。这份笔记涵盖了Java 5.0的关键特性和改进,旨在帮助开发者深入理解这一里程碑式的Java版本,提升编程技能。 Java JDK 5.0是...
Java JDK 6学习笔记是针对Java开发环境的重要参考资料,它涵盖了Java Development Kit(JDK)6版本的关键特性和使用方法。JDK是Java编程语言的核心工具集,包含了编译器、调试器、JVM(Java虚拟机)以及一系列用于...
"良葛格"的Java JDK 6.0学习笔记旨在帮助初学者和有经验的程序员深入理解这一版本的Java语言特性,以及如何利用JDK 6.0进行开发。 一、JDK 6.0主要特性 1. **自动内存管理**:Java 6引入了更高效的垃圾回收机制,...