博客园 - 蛊惑Into
uuid:7d267088-5232-4821-9010-8cd5fdd6cd4f;id=1079545
2012-05-22T06:49:39Z
蛊惑Into
https://www.cnblogs.com/whgw/
feed.cnblogs.com
https://www.cnblogs.com/whgw/archive/2012/05/22/2513334.html
计时器javascript实现代码 - 蛊惑Into
计时器javascript实现代码
2012-05-22T06:50:00Z
2012-05-22T06:50:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】计时器javascript实现代码 <a href="https://www.cnblogs.com/whgw/archive/2012/05/22/2513334.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2012/05/11/2496667.html
Struts2+jQuery+ajax+mySql实现省市二级联动 - 蛊惑Into
Struts2+jQuery+ajax+mySql实现省市二级联动
2012-05-11T12:47:00Z
2012-05-11T12:47:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Struts2+jQuery+ajax+mySql实现省市二级联动 <a href="https://www.cnblogs.com/whgw/archive/2012/05/11/2496667.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2012/05/09/2493467.html
firefox使用技巧(1)——对网页列表排序 - 蛊惑Into
firefox使用技巧(1)——对网页列表排序(含视频)
firefox使用技巧(1)——对网页列表排序
2012-05-09T14:54:00Z
2012-05-09T14:54:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】firefox使用技巧(1)——对网页列表排序(含视频)
firefox使用技巧(1)——对网页列表排序 <a href="https://www.cnblogs.com/whgw/archive/2012/05/09/2493467.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/11/06/2237845.html
jdk和tomcat环境变量配置 - 蛊惑Into
jdk环境变量配置进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置:1、下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe2、安装jdk-6u14-windows-i586.exe3、配置环境变量:右击“我的电脑”-->"高级"-->"环境变量"1)在系统变量里新建JAVA_HOME变量,变量值为:C:\Program Files\Java\jdk1.6.0_14(根据自己的安装路径填写)2)新建c
2011-11-05T17:28:00Z
2011-11-05T17:28:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】jdk环境变量配置进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置:1、下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe2、安装jdk-6u14-windows-i586.exe3、配置环境变量:右击“我的电脑”-->"高级"-->"环境变量"1)在系统变量里新建JAVA_HOME变量,变量值为:C:\Program Files\Java\jdk1.6.0_14(根据自己的安装路径填写)2)新建c <a href="https://www.cnblogs.com/whgw/archive/2011/11/06/2237845.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/11/01/2230982.html
tnsnames.ora配置小结 - 蛊惑Into
listener.ora、 tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener.ora是和数据库服务器端 相关,而tnsnames.ora和sqlnet.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。
2011-11-01T01:19:00Z
2011-11-01T01:19:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】listener.ora、 tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener.ora是和数据库服务器端 相关,而tnsnames.ora和sqlnet.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。 <a href="https://www.cnblogs.com/whgw/archive/2011/11/01/2230982.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/31/2229807.html
Profile文件管理 - 蛊惑Into
Proflie是口令限制,资源限制的命名集合.建立oracle数据库时,oracle会自动建立名为DEFAULT的PROFILE,初始化的DEFAULT没有进行任何口令和资源限制.使用PROFILE有以下一些主要事项.
1,建立PROFILE时,如果只设置了部分口令或资源限制选项,其他选项会自动使用默认值(DEFAULT的相应选项)
2,建立用户时,如果不指定PROFILE选项,oracle会自动将DEFAULT分配给相应的数据库用户.
3,一个用户只能分配一个PROFILE.如果要同时管理用户的口令和资源,那么在建立PROFILE时应该同时指定口令和资源选项.
4,使用PROFILE管理口令时,口令管理选项总是处于被激活状态,但如果使用PROFILE管理资源,必须要激活资源限制.
2011-10-31T01:48:00Z
2011-10-31T01:48:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Proflie是口令限制,资源限制的命名集合.建立oracle数据库时,oracle会自动建立名为DEFAULT的PROFILE,初始化的DEFAULT没有进行任何口令和资源限制.使用PROFILE有以下一些主要事项.
1,建立PROFILE时,如果只设置了部分口令或资源限制选项,其他选项会自动使用默认值(DEFAULT的相应选项)
2,建立用户时,如果不指定PROFILE选项,oracle会自动将DEFAULT分配给相应的数据库用户.
3,一个用户只能分配一个PROFILE.如果要同时管理用户的口令和资源,那么在建立PROFILE时应该同时指定口令和资源选项.
4,使用PROFILE管理口令时,口令管理选项总是处于被激活状态,但如果使用PROFILE管理资源,必须要激活资源限制. <a href="https://www.cnblogs.com/whgw/archive/2011/10/31/2229807.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/31/2229803.html
Oracle用户、权限、角色管理 - 蛊惑Into
Oracle 权限设置
一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
2011-10-31T01:46:00Z
2011-10-31T01:46:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Oracle 权限设置
一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/31/2229803.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/30/2229325.html
Oracle学习笔记——权限管理 - 蛊惑Into
一、系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是sys。登录语句:SQL> conn sys/sys as sysdba; 2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager。登录语句:SQL> conn system/manager; 3)sys和system这两个用户最大的区别是在于有没有create database的权限。 4)scott用户是普通用户,密码默认为tiger,默认未解锁 解锁语句.
2011-10-30T07:47:00Z
2011-10-30T07:47:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】一、系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是sys。登录语句:SQL> conn sys/sys as sysdba; 2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager。登录语句:SQL> conn system/manager; 3)sys和system这两个用户最大的区别是在于有没有create database的权限。 4)scott用户是普通用户,密码默认为tiger,默认未解锁 解锁语句. <a href="https://www.cnblogs.com/whgw/archive/2011/10/30/2229325.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/15/2213459.html
双重检查锁定在JAVA单例中应用的杯具! - 蛊惑Into
所有的编程语言都有一些共用的习语。了解和使用一些习语很有用,程序员们花费宝贵的时间来创建、学习和实现这些习语。问题是,稍后经过证明,一些习语并不完全如其所声称的那样,或者仅仅是与描述的功能不符。在 Java 编程语言中,双重检查锁定就是这样的一个绝不应该使用的习语。在本文中,Peter Haggar 介绍了双重检查锁定习语的渊源,开发它的原因和它失效的原因。
2011-10-15T09:28:00Z
2011-10-15T09:28:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】所有的编程语言都有一些共用的习语。了解和使用一些习语很有用,程序员们花费宝贵的时间来创建、学习和实现这些习语。问题是,稍后经过证明,一些习语并不完全如其所声称的那样,或者仅仅是与描述的功能不符。在 Java 编程语言中,双重检查锁定就是这样的一个绝不应该使用的习语。在本文中,Peter Haggar 介绍了双重检查锁定习语的渊源,开发它的原因和它失效的原因。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/15/2213459.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html
Java 单例模式详解 - 蛊惑Into
java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
2011-10-05T11:00:00Z
2011-10-05T11:00:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/04/2198837.html
java Class类 - 蛊惑Into
Class类(在java.lang包中,Instances of the class Classrepresent classes and interfaces in a running Javaapplication):
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息
获取Class实例的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例(staticClass forName(String className) Returns the Classobject associated with the class or interface with the given stringname. );
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.T
2011-10-04T03:17:00Z
2011-10-04T03:17:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Class类(在java.lang包中,Instances of the class Classrepresent classes and interfaces in a running Javaapplication):
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息
获取Class实例的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例(staticClass forName(String className) Returns the Classobject associated with the class or interface with the given stringname. );
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.T <a href="https://www.cnblogs.com/whgw/archive/2011/10/04/2198837.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/03/2198676.html
Java5 枚举类型 - 蛊惑Into
当使用enum定义一个枚举类型时,实际上所定义的类型自动继承了java.lang.Enum类。而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。
枚举在什么地方适用呢?一条普遍规则是,任何使用常量的地方,例如目前用 switch 代码切换常量的地方。如果只有单独一个值(例如,鞋的最大尺寸,或者笼子中能装猴子的最大数目),则还是把这个任务留给常量吧。但是,如果定义了一组值,而这些值中的任何一个都可以用于特定的数据类型,那么将枚举用在这个地方最适合不过。
2011-10-03T13:42:00Z
2011-10-03T13:42:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】当使用enum定义一个枚举类型时,实际上所定义的类型自动继承了java.lang.Enum类。而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。
枚举在什么地方适用呢?一条普遍规则是,任何使用常量的地方,例如目前用 switch 代码切换常量的地方。如果只有单独一个值(例如,鞋的最大尺寸,或者笼子中能装猴子的最大数目),则还是把这个任务留给常量吧。但是,如果定义了一组值,而这些值中的任何一个都可以用于特定的数据类型,那么将枚举用在这个地方最适合不过。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/03/2198676.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html
Java创建线程的两个方法 - 蛊惑Into
Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:
◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;
◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。
2011-10-03T06:06:00Z
2011-10-03T06:06:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:
◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;
◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/01/2197103.html
Java 可变参数 - 蛊惑Into
Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。
2011-10-01T06:38:00Z
2011-10-01T06:38:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/01/2197103.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/01/2197083.html
overload与override的区别 - 蛊惑Into
override(重写,覆盖)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载,过载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
2011-10-01T06:04:00Z
2011-10-01T06:04:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】override(重写,覆盖)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载,过载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/01/2197083.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/10/01/2196988.html
JDK 1.5的新特性 - 蛊惑Into
泛型(Generics)--为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast)
增强的“for”循环(Enhanced For loop)--减少迭代器(iterator)的潜在错误(error-proneness)
自动置入/自动取出(Autoboxing/unboxing)--无需在基本类型(primitive types)(例如double)和包装类型(wrapper types)(例如Double)之间人工地进行转换。
类型安全的枚举(Typesafeenums)--提供类型安全枚举模式的各项好处。
静态导入(Static import)--无需在使用其他类的静态成员变量前缀其类名.这将使得代码更为简洁。
元数据(Metadata)--使编程人员避免编写样板化代码(boiler plate code),并提供机会进行宣告式程式设计(declarative programming)。
2011-10-01T01:28:00Z
2011-10-01T01:28:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】泛型(Generics)--为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast)
增强的“for”循环(Enhanced For loop)--减少迭代器(iterator)的潜在错误(error-proneness)
自动置入/自动取出(Autoboxing/unboxing)--无需在基本类型(primitive types)(例如double)和包装类型(wrapper types)(例如Double)之间人工地进行转换。
类型安全的枚举(Typesafeenums)--提供类型安全枚举模式的各项好处。
静态导入(Static import)--无需在使用其他类的静态成员变量前缀其类名.这将使得代码更为简洁。
元数据(Metadata)--使编程人员避免编写样板化代码(boiler plate code),并提供机会进行宣告式程式设计(declarative programming)。 <a href="https://www.cnblogs.com/whgw/archive/2011/10/01/2196988.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/09/29/2195874.html
Java中类Exchaner浅析 - 蛊惑Into
Exchaner用于实现两个人之间的数据交换,每个人在完成一定的事物后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
张孝祥老师在讲解Exchaner时的比喻:
好比两个毒贩要进行交易,一手交money,一手交drug,不管谁先来到接头地点后,就处于等待状态了,当另外一方也到达接头地点(所谓到达接头地点,也就是到达了准备街头的状态)时,两者的数据就立即交换了,然后就可以各忙各的了。
2011-09-29T12:14:00Z
2011-09-29T12:14:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】Exchaner用于实现两个人之间的数据交换,每个人在完成一定的事物后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
张孝祥老师在讲解Exchaner时的比喻:
好比两个毒贩要进行交易,一手交money,一手交drug,不管谁先来到接头地点后,就处于等待状态了,当另外一方也到达接头地点(所谓到达接头地点,也就是到达了准备街头的状态)时,两者的数据就立即交换了,然后就可以各忙各的了。 <a href="https://www.cnblogs.com/whgw/archive/2011/09/29/2195874.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/09/29/2195863.html
java.util.concurrent浅析 - 蛊惑Into
java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。
2011-09-29T11:56:00Z
2011-09-29T11:56:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。 <a href="https://www.cnblogs.com/whgw/archive/2011/09/29/2195863.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/09/29/2195862.html
java.util.concurrent介绍 - 蛊惑Into
java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。
2011-09-29T11:55:00Z
2011-09-29T11:55:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。 <a href="https://www.cnblogs.com/whgw/archive/2011/09/29/2195862.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whgw/archive/2011/09/29/2195827.html
CountDownLatch浅析 - 蛊惑Into
CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行。CountDownLatch可以看作是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。
2011-09-29T11:03:00Z
2011-09-29T11:03:00Z
蛊惑Into
https://www.cnblogs.com/whgw/
【摘要】CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行。CountDownLatch可以看作是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。 <a href="https://www.cnblogs.com/whgw/archive/2011/09/29/2195827.html" target="_blank">阅读全文</a>