移送スレッドのプログラム、クラスファイルを移送先マシンに用意しておく必 要はありません。スレッドを起動するマシン上にあれば充分です。
以下、プログラム例を挙げて説明していきます。
ユーザから指示を与えて移動させるスレッドとして、約 100秒間、 `[数値]' を出力し続けるプログラム、Counter を用意します。 次の内容のファイル Counter.java を、環境変数 CLASSPATH に入っているディレクトリに用意します。
public class Counter implements Runnable { public void run() { for (int i = 0; i < 100; i++) { System.out.print("[" + i + "]"); // 数値を出力 try { Thread.sleep(1000); } catch (Exception e) {} } } }
自ら移動するスレッドとして、移動後にメッセージを出力するプログラム、 Messenger を用意します。次の内容のファイル Messenger.java を、 環境変数 CLASSPATH に入っているディレクトリに用意します。
ただし、下記プログラム中の "dest = "移送先マシン名";" は、あ なたが利用する移送先マシン名、または IP アドレスにして下さい。
import NET.shudo.moba.lang.*; import java.io.IOException; public class Messenger implements Runnable { public void run() { String dest = "移送先マシン名"; String msg = "I've migrated."; try { MobaThread.goTo(dest); // 移動 } catch (IOException e) { e.printStackTrace(); Thread.currentThread().stop(); // 停止 } System.out.println(msg); // メッセージ出力 } }
通常のプログラムと同様に、コンパイルします。
% javac Counter.java % javac Messenger.java
スレッドの移送元と移送先、それぞれのマシンで MOBA place を起動します。さきほど用意した Counter.class, Messenger.class が、移送元マシンでのクラスファ イル検索パスに入っていることを確認しておいて下さい。
placeが起動すると、次のメッセージが表示されます。% mobaplace
% mobaplace MOBA place started on your_machine(XXX.XXX.XXX.XXX):10000. Command interpreter is waiting on port 10000. Enjoy!
移送元マシンの place が待ち受けているポートに、telnet で接続します。 ポート番号はデフォルトで 10000 番です。
プロンプトが表示されます。% telnet 移送元マシン 10000
スレッドは start コマンドで起動します。
移送先マシンの place で、メッセージ "I've migrated." が表示されれば成功です。 さきほど用意した Counter を起動します。start Messenger
移送元の place で、約 1秒にひとつずつ `[数値]' と表示されます。 これから、この Counter スレッドを移動させます。start Counter
まず、移送させるスレッドの ID を調べます。これには list コマンドを用います。
次の様な出力が得られます。list
先頭の整数値がスレッドの ID です。move コマンドで移送させます。整数値 "スレッド名" 属性 ...
移送先マシンの place で Counter の出力が続いていれば成功です。move スレッドのID 移送先マシン名