æ¬ã®ææ³ãæ¸ããã¨ã«ããããæãã«ããã°ãã¿ãåãããªãããã«ããçæ´»(´・_ï½¥`)
ã ãã¶åããèªãã§ããæ¬ãã¤ãã«èªã¿çµããã¾ããã
Scalaã ã¨akkaã¨ããã£ã¦ãã¢ã¯ã¿ã¼ã¢ãã«ã ï¼ãããããã ï¼ã¨æã£ã¦ããã§ããã ãã¯ãå 人ã®è¦å´ã®æ´å²ãå®å ¨ã«ã¹ã«ã¼ã§ããã¨ãã訳ã§ã¯ãªãããã ãã ä¸åº¦ããã¯ã¨ãã使ã£ã並è¡å¦çãå¦ãã§ããã¢ã¯ã¿ã¼ã¢ãã«ãåå¼·ããã»ããã ã¢ã¯ã¿ã¼ã®æãé£ã¿ãåããããªã¨æããéã¢ã¯ã¿ã¼ãªä¸¦è¡å¦çããåå¼·ãããã¨ã«ã
Javaã®ä¸¦è¡å¦çãªãã²ã¼ãæ¬ãéæ¿ã¨ããã墨ä»ããããã£ãã®ã§Java並è¡å¦çããã°ã©ãã³ã°ã¨ããæ¬ãé¸ã³ã¾ããã
å 容ã®ç´¹ä»
ãã«ãã¹ã¬ããã®ãããã°ã¯é£ããã¨ãããã¤ããã¨ããã®ã身ã«ãã¿ã¾ããã
ãã®æ¬ã¯ãBadãªã³ã¼ãï¼ãã«ãã¹ã¬ããã ã¨ãã°ãã³ã¼ãï¼ããããã示ããã¦ããã®ã§ããã å®éã«ãããå®è£ ããã¨ä½åãã£ã¦ãæ£å¸¸ã«åä½ãã¦ãã¾ã£ã¦ã ããã¼ï¼ã¨æã£ã¦runã100åãããããã¨ã1åã ããã°ãã¿ãããªã±ã¼ã¹ãããããããã¾ãã(´ï¼Ïï¼`)
ä»ã«ããããã©ã¤ãã©ãªã®ç¡å®³ãªãã°ã¨å¥ã®ã©ã¤ãã©ãªã®ç¡å®³ãªãã°ãçµã¿åããããã¨ã§ãããããã¯ãçºçããã¨ãã£ãã å°çã®ãããªä¾ããã£ã¦æ¬å½ã«ã¤ããã§ãã
å人çã«ã«ãããããã£ãä¾ã¨ãã¦ãp.59ã«ãããµã³ãã«(æ£ããå ¬éãããªãã¨ã¨ã©ã¼ã«ãªããããªã¯ã©ã¹)ãæãã¾ãã
public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSanity() { if (n != n) { throw new AssertionError("This statement is false."); } } } public class Checker { // å®å ¨ã§ãªãå ¬é public Holder h; public void initialize() { holder = new Holder(42); } }
ãªãã¨ãã«ãã¹ã¬ããç°å¢ã§ãä¸è¨ã®initialize
ãassertSanity
ããã¡ããã¡ãã«å©ãã¾ããã¨æ¥µç¨ã«AssertionErrorãæããå¯è½æ§ãããï¼ã¤ã¾ã n != n
ãæç«ãããããï¼ãããã§ãã
ã¨ã¯ãããã¾ãã«ãã¬ã¢éãã¦ãjava - How to demonstrate race conditions around values that aren't published properly? - Stack Overflowãåèã«ã³ã¼ããæ¸ãã¦ãåç¾ãããã¨ã¯ã§ãã¾ããã§ãããåç¾ããã«ã¯Javaã®ãã¼ã¸ã§ã³ããã¼ãã¦ã§ã¢ãã²ã£ãããã¦é å¼µãå¿ è¦ãããããã§ãããã£ãããªã®ãããã£ããªã®ã(ââ¸â)
é²ãã«ã¯Checkerã§publicã«ãããsynchronizedãªgetter/setterãç¨æããã¨ããHolderã®ãã£ã¼ã«ããfinalã«ãã¦ä¸å¯å¤ã«ãããªã©ãããã¾ããã詳ããã¯æ¬æ¸ãåç §ãã¦ã¿ã¦ãã ããã
ãã®ãããªãã«ãã¹ã¬ããã«é¢ããã¤ãããé¿ããããã«synchronized
ã¨ã飿ããã¨ãä»åº¦ã¯ãã«ãã¹ã¬ããã«ããæå³ãªãããï¼ã¿ãããªæ§è½ããåºãªãã£ãããã¦ãããããå®å
¨æ§ã¨ã¹ã±ã¼ã©ããªãã£ã®çéã§å¯è¦æ§
ã¨ããã¹ã¬ãããã¼ã«ã«
ã¨ãã使ããªããã¹ã¬ããã»ã¼ããªã¯ã©ã¹ãè¨è¨ãã¦ããæ¦ãæ¹ããã®æ¬ã«ã¯æ¸ãã¦ããã¾ãã
çµ¶çãªã®ã§æ°åã§å ¥æããå¿ è¦ãããããã¯ã並è¡å¦çã¯ã¤ããã¨ããæãï¼ï¼ï¼ã§ãããä¸è¨ã®ãããªã¤ãããå³ãããã人ï¼ãä»äºã§å³ãããããªã人ï¼ã¯èªãã§ã¿ãã¨æ¥½ããããããã¾ãã( â°ââ°)
å 容ã«é¢ãã詳ãããã¨ã¯ãæ¢ã«ããããã®æ¸è©ãæ¸ããã¦ããã®ã§ãã¡ããåèã«ããã¨ç¥ããã¨ãåºæ¥ãã¨æãã¾ãã
読んだ: Java 並行処理プログラミング / ブライアン・ゲーツ、ダグ・リー、他 著、岩谷宏 訳 - ひだまりソケットは壊れない
並è¡ãã¦akka in actionãèªãã ããã¦ããã®ã§ãã¢ã¯ã¿ã¼ã¢ãã«ãããã«è¾ããªãã宿ã§ãã¦ãã¾ããï¼ã¢ã¯ã¿ã¼ãè¾ããªãã¨ã¯è¨ã£ã¦ããªãï¼ ãã®æ¬ã®å 容ãèªãã ã ãã§æããã«ãã¹ã¿ã¼ãã¦ããªãæããªã®ã§ããå°ããã¤ç¿å¾ãã¦ããããã§ãââ (à¸Â´ï½¥_ï½¥`)ว â¾â¾