開始學(xué)習(xí)java也有一段時(shí)間了,一些基礎(chǔ)的書也掃了一遍了(think in java/core java volume 1)。最近慢慢開始看<concurrent programming in java>和<Effective java>,后者的話和<Effective C++>有類似之處,都是一些編程經(jīng)驗(yàn)的item, 編程的世界里好多的東西都是相同的。
由于之前的話是做C++ client端的編程,一個(gè)application直接在一個(gè)process里完成的,沒(méi)有接觸到thread相關(guān)的知識(shí)(相關(guān)的同步,鎖都是在UNIX環(huán)境高級(jí)編程里學(xué)習(xí)過(guò)),最近的工作又是直接基于erlang的編程,其天生為高并發(fā)而生所以一般都是每個(gè)請(qǐng)求直接spawn一個(gè)process, process之間的信息交互又是基于語(yǔ)言級(jí)別的message queue實(shí)現(xiàn)的,所以很少接觸到鎖、同步的問(wèn)題。
看<concurrent programming in java>感覺自己又回到了好多年前看<Unix 環(huán)境高級(jí)編>的時(shí)候?;貞浧鸶鞣NIPC和鎖的知識(shí)了。言歸正傳,由于其作者Doug Lea是并發(fā)編程的大牛同時(shí)也是java concurrent包的作者所以你會(huì)看到很多優(yōu)秀的編碼習(xí)慣,這個(gè)系列的話主要摘抄一些好的代碼和編碼習(xí)慣,作為日后的寶典:
ch1/ParticleCanvas.java
for (int i = 0; i < ps.length; ++i) {
ps[i].draw(g);
}
關(guān)于++i的優(yōu)勢(shì)記得是在一本Effective類的書里看到的,但是自己寫代碼的時(shí)候很容易寫成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;
}
}
}
這里其實(shí)是對(duì)<Effective Java> item 6的最佳實(shí)踐,threads[i].interrupt();之后該對(duì)象已經(jīng)變成一個(gè)過(guò)期的引用了,此時(shí)就應(yīng)該清空這個(gè)引用。
<END>