`
kuyuyingzi
  • 浏览: 53757 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
文章列表
Java多线程-新特性-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。 下面是个很简单的例子: package cn.thread; import java.util.concurrent.Callabl ...
Java多线程-新特征-条件变量 条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象上调用newCondition()方法来获取的,这样,条件就和一个锁对象绑定起来了。因此,Java中的条件变量只能和锁配合使用,来控制并发程序访问竞争资源的安全。 条件变量的出现是为了更 ...
以JDBC的回调函数操作为例: 1、定义一个回调函数接口:用于收集查询结果并转换成实体 import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public interface ResultSetCall<T> { public List<T> getList(ResultSet resultSet) throws SQLException; }2、定义一个参数回调接口和默认实现类,用于填充参数 import java.sql.Connection; ...
Java线程中的join是使用线程从异步执行变成同步执行。 join使用示例1:在一个线程中使用 MyThread thread = new MyThread(); thread.start(); thread.join();
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法。 欲先取之,必先予之。一般在使用线程时都需要有一些初始化数据,然后线程利用这些数据进行加工处理,并返回结果。在这个过程中最先要做的就是向线程中传递数据。一、通过构造方法传递数据
1. 工具类collections用于操作集合类,如List,Set,常用方法有: 1) 排序(Sort) 使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的 double array[] = {112, 111, 23, 456, 231 }; for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.sort(list); fo ...
功能列举 可以说 Java Collections Framework 满足了我们大多数情况下使用集合的要求,但是当遇到一些特殊的情况我们的代码会比较冗长,比较容易出错。Guava Collections 可以帮助你的代码更简短精炼,更重要是它增强了代码的可读性。看看 Guava Collections 为我们做了哪些很酷的事情。 Immutable Collections: 还在使用 Collections.unmodifiableXXX() ? Immutable Collections 这才是真正的不可修改的集合 Multiset: 看看如何把重复的元素放入一 ...
重新组织数据 1、SelfEncapsulateField(自封装字段) 动机:你直接访问一个字段,但与字段直接的耦合关系逐渐变得笨拙。 做法:为这个字段建立取值/设置函数,并且只以这些函数来访问字段。 2、ReplaceDatavaluewithObject(以值对象取代数据值) 动机:比如说电话号码,一开始你可能会用一个字符串来表示“电话号码”概念,但是随后你就会发现,电话号码需要”格式化“、”抽取区号“之类的特殊行为。 3、ChangeValuetoReference(将值对象改为引用对象) 动机:有时候,你会从一个简单的值对象开始,在其中保存少量不可修改的数据。而后, ...
在对象之间搬移特性 1、MoveMethod(搬移函数) 动机:你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用。 做法:在该函数最常饮用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。 2、MoveField(搬移字段) 动机:你的程序中,某个字段被其所驻类之外的另一个类更多地用到。 3、ExtractClass(提炼类) 动机:某个类做了应该由两个类做的事。 做法:建立一个新类,将相关字段和函数从旧类搬移到新类。 4、InlineClass(将类内联化) 动机:某个类没有做太多事情。 做法 ...
重新组织函数 1、ExtractMethod(提炼函数) 动机:你有一段代码可以被组织在一起并独立出来。 做法:将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。 如下面的实例,提炼后的代码变得更清晰易读。 代码 ...
String.split(".")为null问题 “.”是正则表达式里面的关键字,因此这里会出错。 解决方法:用StringTokenizer替换 java.util.StringTokenizer token = new java.util.StringTokenizer(String,"."); token.nextToken() 获取3位数字,前面补零 int youNumber = 1; // 0 代表前面补充0 // 3 代表长度为3 ...
代码的坏味道 1、DuplicatedCode重复代码 2、LongMethod过长函数 如果函数内有大量的参数和临时变量,它们会对你的函数提炼形成阻碍。如果你尝试运用ExtractMethod(提炼函数),最终就会把许多参数和临时变量当做参数,传递给 ...
重构定义:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 为何重构:重构改进软件设计、重构使软件更容易理解、重构帮助找bug、重构提高编程速度 何时重构:三次原则(三次再做类似的事)、添加功能时重构、修补错误时重构、复审代码时重构 是什么让程序如此难以修改?四个原因: 1、难以阅读的程序,难以修改; 2、逻辑重复的程序,难以修改; 3、添加新行为时需要修改已有代码的程序,难以修改; 4、带复杂条件逻辑的程序,难以修改 我们希望程序:容易阅读;所有逻辑都只在唯一地点制定;新的改动不会危及现有行为;尽可能简单表达条件逻辑。 ...
Ext的两种克隆的方法: 可以克隆对象、数据等:var newJson = Ext.clone(json); 只能克隆数组:var newJson = Ext.Array.clone(json); JQuery的方法: 深复制【可以迭代】:var newJson = jQuery.extend(true,{}, json); 浅复制【不能迭代】:var newJson = jQuery.extend({}, json); var newJson = $.map(json,function (n) { return n; }); 数组的克隆方法: ...
splice() 处理数组的方法很多,javascript splice()算是最强大的了,它非常灵活可以用于插入、删除或替换数组的元素。下面来一一介绍! 1.删除-用于删除元素,两个参数
Global site tag (gtag.js) - Google Analytics