ã¹ã¬ããã®åæå®è¡å¶å¾¡(synchronized)
synchronizedã§è¤æ°ã¹ã¬ããã®åæå®è¡å¶å¾¡ãã§ãã¾ãã
- æ©è½ã¯Javaã®synchronizedã¨åãã§ãæå®ãããå¦çãã1ã¹ã¬ããããã®ã¿å®è¡ãããããã«ãªãã¾ããåæã«è¤æ°ã¹ã¬ããããå®è¡ããããã¨ã¯ããã¾ããã
- Javaã¨éã£ã¦ããã¹ã¦ã®åç
§åã®åºåºã¯ã©ã¹ã§ããAnyRefã®ã¡ã½ããã¨ãã¦å®ç¾©ããã¦ãã¾ãã
- å¼æ°ã§åæåããå¦çãåãåãã¾ãã
- ã¾ããåãåã£ãå¦çã®çµæãå¤ã¨ãã¦è¿ãã¾ãã
import scala.concurrent._ import scala.concurrent.ops._ import java.lang.Thread._ object SynchronizeSample { def main(args: Array[String]) { // åæåç¨ãªãã¸ã§ã¯ã val monitor = new Object // 並åå®è¡ããå¦ç // monitor.synchronizedã«ãããè¤æ°ã¹ã¬ããã§ä¸¦åã«å®è¡ããããã¨ã¯ãªãã def proc(name:String) = monitor.synchronized( 0 to 3 foreach( i=> println( name + " : meow!" )) ) // 3ã¹ã¬ããã§ä¸¦åå®è¡ spawn( proc( "mii" ) ) spawn( proc( "tora" ) ) spawn( proc( "shiro" ) ) sleep(1000) // ã»ãã¨ã¯ã¡ããã¨å¾ ããªãã¨ãããªãã } }
å®è¡çµæã§ãã
mii : meow! mii : meow! mii : meow! mii : meow! tora : meow! tora : meow! tora : meow! tora : meow! shiro : meow! shiro : meow! shiro : meow! shiro : meow!
åæå®è¡å¶å¾¡ãã¦ãªãå ´åã®åä½ã¯昨日のサンプルãåç §ã
Lockã使ã
åæå®è¡å¶å¾¡ã¯scala.concurrent.Lockã使ã£ã¦ãã§ãã¾ãããã£ã¡ã¯æ¬¡ã®ãããªæãã§ä½¿ãã¾ãã
import scala.concurrent._ import scala.concurrent.ops._ import java.lang.Thread._ object LockSample { def main(args: Array[String]) { // åæåç¨ãªãã¸ã§ã¯ã val lock = new Lock // 並åå®è¡ããå¦ç // Lockã«ãããè¤æ°ã¹ã¬ããã§ä¸¦åã«å®è¡ããããã¨ã¯ãªãã def proc(name:String) = { try { lock.acquire // ããã¯ãç¢ºä¿ 0 to 3 foreach( i=> println( name + " : meow!" )) } finally { lock.release // ããã¯ãè§£æ¾ } } // 3ã¹ã¬ããã§ä¸¦åå®è¡ spawn( proc( "mii" ) ) spawn( proc( "tora" ) ) spawn( proc( "shiro" ) ) sleep(1000) // ã»ãã¨ã¯ã¡ããã¨å¾ ããªãã¨ãããªãã } }