`
scanfprintf123
  • 浏览: 80552 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
  好吧,这里我只想说说volatile在JMM中的语义。     当我们在使用volatile的时候,实际上它表达了下面那么些意思。      1. 可见性。       这个是大多数人都知道的一个特质, JAVA的线程有自己的工作内存区,与主存区不同,当我们对变量使用了volatile后,那么不管对这个变量的读或写,都会在主存中进行,而不会在处理器的缓存或者寄存器中进行。这个很好理解。        2. 禁止CPU指令的重排序       这个特质的理解稍微要花点脑细胞, 首先我们需要一点premilinary, 当我们的程序编写好了以后,会被翻译成指令集并被加载到内存 ...
我们知道,当应用层程序之间进行网络数据传输时,在发送端,数据会从应用层沿着协议栈向下传输,通过TCP/IP层,然后经由链路层发送出去,而在接收端,则是相反的顺序,数据经由链路层接收,然后沿着协议栈向上传输,通 ...
我们在开发的时候,常常会有这样的需要,需要保证某个操作只运行一段时间,如果超时了,就执行对应的超时操作。   比如,在读取网络请求的时候,我们希望3秒内能读到数据,如果超过了3秒没有读到,那么就不读了,提 ...
在多核的时代,我们开始编写并发程序,于是碰到了InterruptedException,SUN的java文档告诉我们,当一个线程在sleep(),wait()或者join()的时候,如果被其他线程中断(通过thread.interrupt()方法),线程内部都会抛出这个InterruptedException异常。 在知道了来龙去脉后,我们开始处理InterruptedException异常,于是,我们有了下面的代码:   try { Thread.sleep(1000); }catch(InterruptedException ex) { logger.e ...
为什么不能使用Thread.stop()方法? 从SUN的官方文档可以得知,调用Thread.stop()方法是不安全的,这是因为当调用Thread.stop()方法时,会发生下面两件事: 1. 即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeath Error,包括在catch或finally语句中。 2. 释放该线程所持有的所有的锁   当线程抛出ThreadDeath异常时,会导致该线程的run()方法突然返回来达到停止该线程的目的。ThreadDetath异常可以在该线程run()方法的任意一个执行点抛出。但是,线程的stop( ...
Groovy 中提供了一种可以将List直接转成对象的方式,这种方式将隐式调用Groovy bean中定义的构造函数来创建对象。   假设我们有如下Groovy bean定义:     class Addr{ String homeAddr String workAddr Addr(def home,def office) { this.homeAddr=home this.workAddr=office } }     那么创建Addr对象将有如下几种方式:   1.  显示调用构造函数Addr(def home,def office ...
要想了解Groovy闭包中的this,owner和delegate的含义,首先我们需要知道闭包能在哪些上下文中进行创建。   创建闭包的上下文   首先,闭包可以在方法体中创建(类的实例方法或者静态方法均可)   class Person{ def static method(){ def methodClosure={ println "methodClosure this:"+this println "methodClosure owner:"+owner println "methodC ...
Groovy的named parameter 一般有两个用途: 1. 用在groovybean的构造函数中,提供一种便利的方式来创建新对象。 2. 用在方法中(static or not-static),如果传入的参数是named parameter的话,那么该方法会自动收集这些named parameter,然后当成该方法的第一个参数。   我们先来看看第一种用途,假设我们有下面的groovybean:     class Person { String name int age }     那么groovy会自动的 ...
   今天有同事问我关于Observer模式的一个问题,说观察者(Observer)为什么要依赖于主题(Subject),如下图所示:         从上图可以看出,具体的观察者对具体的主题有一个依赖, 而且从JDK本身提供的Observer接口,我们也可以看 ...
    在学习Java泛型的过程中,我们常常看到这样泛型的使用, class Person<E extends Number>, 这个表示什么呢,这个其实就是java 泛型的upper bound(上限界定),它给我们带来了什么呢?实际上,它定义了以下3个内容:   限定了一组可用于实例化泛型参数的类型。 能够访问基类所定义的所有非private成员(方法以及属性)。 在编译成字节码时,用基类代替所有的占位符E。 先来看第一点,E extends Number表示在实例化这个类型参数的时候,只能使用Number的子类进行实例化。如: Person p1= ne ...
     如果大家处理过多语言资源,那么对JDK这个自带的native2ascii肯定不会陌生,它能够帮我们把不同的编码转化成统一的unicode编码,来实现国际化。     一般我们都这么用,假设我们有这么一个文件zh.txt,其内容只有这么一行:          然后我们使用native2ascii来将其内容转成unicode编码:              很简单,但是你考虑过zh.txt文件的编码了吗?如果这个zh.txt文件是别人提供给你的,可能里面是采用了别的编码,那么如果仅仅是通过简单的native2ascii zh.txt是不可以的。       很庆幸,na ...
     很多人在学习设计模式,也都能把GOF书中的factory, state, singleton, decorator等等说的叽里呱啦的,但是很多人其实都不知道怎么来用设计模式,工作几年,看过一些优秀的设计,但看过的更多的是滥用模式的设计,大部分人对设计模式的了解也都停留在层面上,在工作中曾有机会去对资历年长过自己的同行进行过面试,GOF中的模式随便挑一些出来问询,模式的用途,解决的问题以及优缺点什么的,大部分都能答个八九不离十,但是再往深入点,比如问,state与strategry的区别?或者两个维度的业务变化可以用Bridge来分离,那面对大于两个维度的业务变化时呢? 对于此类稍微深入 ...
     在开发多线程并发的程序时,对列表进行遍历是一个很常见的操作。比如说在观察者模式中,当某个事件发生时,就需要通知到对应的观察者进行事件的处理,这里就需要对观察者列表进行遍历,逐一触发观察者进行事件 ...
     Command模式是GOF中较为简单的,用来封装行为的一个模式。在我们初涉设计模式的领域前,我们可能就在不知不觉中使用了它。比如说JAVA多线程中的Ruuable接口,比如说swing编程中用于处理事件的action,这些通通都是Command模式的使用。跟很多行为型模式一样,command模式用于降低接收者和发送者的耦合,我们经常可以在一些开源框架中看到,command实例对象常在层与层之间进行传递,接收者对于接收到的command,根本不知道其所能处理的业务,只知道如何调用它来执行。        举我们常见的业务框架的处理来讲,每一个command对应于一个业务处理类,这些c ...
   说起COR(责任链模式),大家最熟悉可能就是阎老在他那部大部头《设计模式》中举的‘击鼓传花’的形象例子,那里实现了一个很传统的COR模式。而从我看过的COR实现的方式上讲,从业务角度上区分,可分为两种: 完全推卸责任的COR 部分推卸责任的COR    当我们在开发一个项目或者产品时,为了职责分离以及开发的效率,我们常常采用的是分层分模块开发,一部分人负责前台,一部分人负责业务层,一部分人负责数据访问层等等。当开发完成后,我们都会移交给QA进行测试。当QA测试发现问题时,就会去找前台的人(大多数情况下,QA一般不知道这个问题是归谁负责,所以一般都从源头找起)。 完全推卸责任的 ...
Global site tag (gtag.js) - Google Analytics