私のプログラムは以下のようになります
- メインプログラム (スレッド 1)
- 複数の単純な Java スレッドを作成する (Thead 1.1、1.2...)
- 各スレッド(1.1または1.2 ..)で、応答していないことがある1つのメソッド(CORBA呼び出し)を呼び出す処理も行っています。このメソッドのタイマーを定義したいのですが、スレッド(呼び出している人は誰でも1.1または1.2)は、応答またはタイマーの期限が切れるまでそこで待機する必要があります。
以下のサンプルプログラムを作成しました。これは正しいアプローチではないと思います。より良いアプローチはありますか?このプログラムでは、interupt メソッドが呼び出されるタイミングがわかりません。
public class MethodTimeout implements Runnable{
/**
* @param args
*/
public Thread t1 = null;
public int threadnum = 0;
public static void main(String[] args) {
for (int i=0; i<3; i++){
MethodTimeout mt =new MethodTimeout();
Thread t = new Thread(mt,"thread "+(i+1));
mt.t1 = t;
mt.threadnum = (i+1);
t.start();
}
System.out.println("stmt after execution");
}
public Object testTimeout(){
long startTime = System.currentTimeMillis();
try {
System.out.println("in side method start "+t1.getName()+" start time"+startTime);
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endtime = System.currentTimeMillis();
System.out.println("in side method end "+t1.getName()+" total time"+(endtime-startTime) );
return null;
}
@Override
public void run() {
Thread timeout = new Thread (){
public void run() {
testTimeout();
};
};
timeout.start();
try {
Thread.sleep(2000);
timeout.interrupt();
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(t1.getName() + " is ending");
}
}