`
envy2002
  • 浏览: 151686 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java concurrent学习记录

 
阅读更多

   今天决定学习一下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并发编程学习笔记.rar

    这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...

    良葛格java5.0的学习笔记

    良葛格的Java 5.0学习笔记,作为一位学习者的经验总结,对于初学者来说无疑是一份宝贵的资源。以下是对这些笔记中可能涵盖的知识点的详细解释: 1. **Generics(泛型)**:Java 5.0最大的变化之一就是引入了泛型,...

    给自己记录的JAVA安全学习笔记.zip

    Java安全学习笔记主要涵盖以下几个核心领域: 1. **Java安全模型**:Java的安全模型是其设计的核心部分,旨在保护系统免受恶意代码的攻击。它基于沙箱模型,限制了未经许可的代码对系统资源的访问。Java Security ...

    《Java JDK 6 学习笔记》配书示例

    《Java JDK 6 学习笔记》这本书很可能是为了帮助读者深入理解和掌握这个版本的Java编程语言及其开发环境。以下是一些关键知识点的详细说明: 1. **自动装箱与拆箱**:Java 6中引入了自动装箱和拆箱功能,使得基本...

    Javajdk5学习笔记

    以下是对"Javajdk5学习笔记"中可能包含的知识点的详细解析: 1. **自动装箱与拆箱**:JDK 5引入了自动装箱和拆箱功能,使得基本类型和它们对应的包装类之间可以无缝转换,提高了代码的简洁性。例如,`Integer i = ...

    JAVA课程学习笔记.doc

    本篇学习笔记将深入解析Java线程池的框架、结构、原理以及相关源码,帮助读者全面理解线程池的工作机制。 1. 线程池模块结构 线程池框架分为多层结构,其中包括核心实现类、辅助类和接口等组件。例如,`sun.nio.ch....

    Java+JDK6学习笔记

    本篇将围绕“Java+JDK6学习笔记”展开,探讨在JDK6环境下Java编程的核心知识点。 1. **JDK6概述**:JDK6是Oracle公司于2006年发布的Java平台标准版(Java SE)的一个重要版本,它的全称是Java SE 6,带来了许多新...

    Java并发编程学习笔记.

    3. **同步机制**:Java提供了多种同步机制,如`synchronized`关键字、`volatile`关键字、`Lock`接口(包括`ReentrantLock`可重入锁)和`java.util.concurrent`包下的工具类。这些机制用于解决多线程环境下的数据一致...

    Java并发编程学习笔记

    可重入锁是Java.util.concurrent.locks包下的ReentrantLock类,支持公平锁和非公平锁,具有比synchronized更细粒度的控制。它提供tryLock()方法,可以在无法获取锁时立即返回,而不是等待。 3. **ThreadLocal**: ...

    良葛格Java JDK 5[1].0学习笔记

    Java JDK 5.0是Java开发工具包的一个重要版本,由Sun Microsystems(后被Oracle收购)于2004年发布。...通过阅读“良葛格Java JDK 5.0学习笔记”,读者可以系统地学习和掌握这些内容,进一步提升自己的Java编程技能。

    Java学习记录.rar

    【Java学习记录】是本次压缩包文件的主题,它暗示了我们即将探讨的是关于Java编程语言的学习过程和经验总结。在编程领域,Java以其跨平台、面向对象和强大的库支持而广受欢迎,是初学者和专业开发者的重要选择。下面...

    java学习笔记JDK6课件和课本代码

    本资源"java学习笔记JDK6课件和课本代码"是一个针对初学者和有一定基础的开发者的学习资料集合,它涵盖了JDK6版本的相关内容。 JDK6是Java历史上的一个重要版本,发布于2006年,引入了许多新特性,包括增强的Swing...

    良葛格java jdk 5.0学习笔记

    《良葛格java jdk 5.0学习笔记》是一份深入探讨Java编程语言核心特性的资源,特别针对Java Development Kit (JDK) 5.0版本。这份笔记旨在帮助初学者和有经验的开发者更好地理解和掌握Java 5.0的新特性,提升编程技能...

    良葛格java jdk 5.0学习笔记.rar

    这份"良葛格java jdk 5.0学习笔记"是针对这个版本的重要学习资源,适合初学者和有一定经验的开发者参考。 1. **泛型**:Java 5.0引入了泛型,允许在定义类、接口和方法时指定参数类型,增强了类型安全,避免了运行...

    良葛格Java JDK 5.0学习笔记

    《良葛格Java JDK 5.0学习笔记》是一份深度探讨Java开发工具包(JDK)5.0版本的详尽资料。这份笔记涵盖了Java 5.0的关键特性和改进,旨在帮助开发者深入理解这一里程碑式的Java版本,提升编程技能。 Java JDK 5.0是...

    Java JDK 6学习笔记

    Java JDK 6学习笔记是针对Java开发环境的重要参考资料,它涵盖了Java Development Kit(JDK)6版本的关键特性和使用方法。JDK是Java编程语言的核心工具集,包含了编译器、调试器、JVM(Java虚拟机)以及一系列用于...

    良葛格java jdk 6.0学习笔记代码.rar

    "良葛格"的Java JDK 6.0学习笔记旨在帮助初学者和有经验的程序员深入理解这一版本的Java语言特性,以及如何利用JDK 6.0进行开发。 一、JDK 6.0主要特性 1. **自动内存管理**:Java 6引入了更高效的垃圾回收机制,...

    Java JDK 6学习笔记——ppt简体版.rar

    这份"Java JDK 6学习笔记——ppt简体版"提供了关于这个关键版本的详细教程,适合初学者和有一定经验的开发者来深入理解Java编程。 首先,我们要了解Java JDK是什么。Java Development Kit,简称JDK,是Oracle公司...

Global site tag (gtag.js) - Google Analytics