2017-02-24 09:56:33
java之泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
1254
2017-02-24 09:58:50
【死磕Java并发】-----深入分析synchronized的实现原理
记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。 诚然,随着Javs SE
1212
2017-02-24 10:01:15
【死磕Java并发】-----深入分析volatile的实现原理
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更
1354
2017-02-24 10:03:01
【死磕Java并发】-----Java内存模型之happens-before
在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-before,从JDK 5 开始,JMM就使用ha
1525
2017-02-24 10:05:26
【死磕Java并发】-----Java内存模型之重排序
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 1. 在单线程环境下不能改变程序运行的结果; 2. 存在数据依赖关系的不允许重排序如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-before原则推导出来的,JMM允许任意的排序。as-if-serial语义as-if-se
1556
2017-02-24 10:07:47
【死磕Java并发】-----Java内存模型之分析volatile
前篇博客【死磕Java并发】—–深入分析volatile的实现原理 中已经阐述了volatile的特性了:volatile可见性;对一个volatile的读,总可以看到对这个变量最终的写;volatile原子性;volatile对单个读/写具有原子性(32位Long、Double),但是复合操作除外,例如i++;JVM底层采用“内存屏障”来实现volatile语义下面LZ就通过happens
1658
2017-02-24 10:15:16
2017-02-24 10:20:09
.Net配置文件——统一节点配置管理
对于.Net中的自定义节点,如果要单独处理,就要为这个节点添加一个指定的类,如果我们在一个应用程序中,定义了很多个自定义节点的话,还按照这样做,就会多出很多个处理类来,为了避免太多的类,我们将所有自定节点都指定一个自定义节点作为入口,然后只写一个处理类,以此为入口,读取其他节点。 例如,配置文件只定义一个入口节点: 20
1908
2017-02-24 10:26:02
.Net配置文件——反射+配置文件存储类型实例
配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): namespace ClassLib{ /// /// Interface IGreetingStrategy /// /// Editor:v-liuhch CreateTime:2015/6/28 11:01:58 pub
1403
2017-02-24 10:29:52