开始学习java也有一段时间了,一些基础的书也扫了一遍了(think in java/core java volume 1)。最近慢慢开始看<concurrent programming in java>和<Effective java>,后者的话和<Effective C++>有类似之处,都是一些编程经验的item, 编程的世界里好多的东西都是相同的。

由于之前的话是做C++ client端的编程,一个application直接在一个process里完成的,没有接触到thread相关的知识(相关的同步,锁都是在UNIX环境高级编程里学习过),最近的工作又是直接基于erlang的编程,其天生为高并发而生所以一般都是每个请求直接spawn一个process, process之间的信息交互又是基于语言级别的message queue实现的,所以很少接触到锁、同步的问题。

看<concurrent programming in java>感觉自己又回到了好多年前看<Unix 环境高级编>的时候。回忆起各种IPC和锁的知识了。言归正传,由于其作者Doug Lea是并发编程的大牛同时也是java concurrent包的作者所以你会看到很多优秀的编码习惯,这个系列的话主要摘抄一些好的代码和编码习惯,作为日后的宝典:

ch1/ParticleCanvas.java

for (int i = 0; i < ps.length; ++i) {
    ps[i].draw(g);
}

关于++i的优势记得是在一本Effective类的书里看到的,但是自己最近写代码的时候很容易写成i++, 之所以摘抄这一条完全是为了警示自己。

ch1/ParticleApplet.java

public synchronized void stop() {
    if (threads != null) {
        for (int i = 0; i > threads.length; ++i) {
            threads[i].interrupt();
            threads[i] = null;
        }
    }
} 

这里其实是对<Effective Java> item 6的最佳实践,threads[i].interrupt();之后该对象已经变成一个过期的引用了,此时就应该清空这个引用。

<END>


lzh2nix
52 声望19 粉丝

2019年目标: