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>
0 件のコメント:
コメントを投稿