java併發編程學習---之一

開始學習java也有一段時間了,一些基礎的書也掃了一遍了(think in java/core java volume 1)。最近慢慢開始看<concurrent programming in java>和<Effective java>,後者的話和<Effective C++>有相似之處,都是一些編程經驗的item, 編程的世界裏好多的東西都是相同的。java

因爲以前的話是作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++, 之因此摘抄這一條徹底是爲了警示本身。app

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>學習

相關文章
相關標籤/搜索