投稿エディタのヘルプを見たら、以前の改行設定ではなく「投稿オプションで設定」するように書いてあった...。
スクリプトを投稿に載せる都合上、自動改行されると困るケースの方が多いのでOFF。
2010-04-29
今さらRhinoのsync()について知った
引数として関数オブジェクトを渡すと、Javaでいうsynchronized(this)な関数に変換してくれる。
1. 書いてみる
1. 書いてみる
// よくある何とかHolder var numHolder = function(initNum) { this.out = java.lang.System.out; this.num = initNum; // 加算と減算 this.incNum = function() { for (var i = 0; i < 10; i++) { this.out.print(" inc:" + this.num++); } } this.decNum = function() { for (var i = 0; i < 10; i++) { this.out.print(" dec:" + this.num--); } } // sync()を使って同期関数を用意する this.incNumSync = sync(this.incNum); this.decNumSync = sync(this.decNum); }; // Holder一個だけ作っておく var theHolder = new numHolder(0); // 別スレッドで、ひたすら加算する var runner = new java.lang.Runnable() { holder: theHolder, run: function() { this.holder.incNum(); // *sync()を使う場合* //this.holder.incNumSync(); } }; new java.lang.Thread(runner).start(); // メインスレッドで、ひたすら減算する theHolder.decNum(); // *sync()を使う場合* //theHolder.decNumSync();2. sync()を使わない場合の動作
js> load("synctest.js"); dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 inc:-7 in :-3 inc:-2 inc:-1 inc:0 inc:1 inc:2 dec:3 dec:2 dec:1js>3. sync()を使う場合の動作
js> load("synctest.js"); dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 dec:-7 dec:-8 c:-9 inc:-8 inc:-7 inc:-6 inc:-5 inc:-4 inc:-3 inc:-2 inc:-1js>
登録:
投稿 (Atom)