- Thread抛出异常就死亡了。但是线程池却会生成一个新的线程
不要使用字符串连接操作符来合并多个字符串,除非性能无关紧要。相反,应该使用StringBuilder的append方法。另一种方法是,使用字符数组,或者每次只处理一个字符串,而不是将它们组合起来。
以为字符串的不可变,当两个字符串连接在一起时,他们的内容就会被拷贝
1 | StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH); |
尽量使用接口引用对象
不用接口引用的情况:
没有合适的接口的情况。例如: 值类型,String和StringBuilder,Random。通常是final类型.
如果程序依赖于实现了某个接口的类的额外方法,例如LinkedHashMap
本节我们不使用Spring配置方式,使用DUBBO提供的API来做。
本节使用API的方式搭建了一个服务提供(Provider),服务注册中心(Registry),服务消费(Consumer)的分布式系统。在非Spring环境下,可以尝试使用这种方式
可是我不明白的是为什么那个数据结构是个map 呢? : 允许将多个线程变量放到map中.
1 | ThreadLocal<String> threadLocalA= new ThreadLocal<String>(); |
foreach可以遍历iterable接口
foreach循环在简洁性与预防bug方面有着传统的for循环无法比拟的优势.
除了一下情况:
过滤- 将删除特定元素remove方法
转换- 使用列表迭代器或者数组索引,以便设定元素的值
平行迭代- 如果并行遍历多个集合,就需要显示的控制迭代器和索引变量
http://blog.csdn.net/zhtzyh2012/article/details/46675065
循环提供特殊机会将变量作用域最小化.(无论传统for,还foreach).for循环,都允许声明循环变量,它们的作用域被限定在正好的作用范围之内.(范围包括循环体,以及循环体之前的初始化,测试,更新).如果循环终止之后不再需要循环变量内容,for循环优于while循环.
几乎每个局部变量的声明都应该包含一个初始化表达式.如果没有足够信息来对一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止.例外情况是与try..catch有关.
for循环比while循环另外优势:更简短,增加可读性.
1 | public static void main(String[] args) { |
1 | private static final class ProxyClassFactory |