オタクのブ。

〜 オタクが発信する(たまには)役に立つ情報とオタク観察日記 〜
<< SJC-Pの難易度 | main | お勧めのオンラインストレージ >>

スポンサーサイト

スポンサードリンク

一定期間更新がないため広告を表示しています

スポンサードリンク
- | permalink | - | -

SCJ-P Threadの勉強

Threadクラスで主に出題されるメソッドは、以下のメソッドみたいなのでそれをつかったサンプルプログラムを作ってみました。

void start()
void join()
static void sleep(long millis)
static void yield()

●TestThread.java
package study;

public class TestThread extends Thread {
enum THREAD_MODE{SLEEP, YIELD, NONE, NONE2};

THREAD_MODE mode= THREAD_MODE.NONE;

public TestThread(THREAD_MODE _mode){
mode=_mode;
}

public static void main(String[] args){
System.out.println("Main thread Started");
try {

Thread t2 = new TestThread(THREAD_MODE.YIELD);
t2.start();
Thread t1 = new TestThread(THREAD_MODE.SLEEP);
t1.start();
Thread t3 = new TestThread(THREAD_MODE.NONE);
t3.start();

// Join TestTread
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("Main thread Finished");
}

public void run(){
System.out.println("Test thread Started " + mode);

try {
for(int i=0;i<10;i++)
{
switch(mode){
case SLEEP:
Thread.sleep(1); break;
case YIELD:
Thread.yield();break;
default:
break;
}
System.out.println(mode);
}
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("Test thread Finished " + mode);
}

}


●実行結果
Main thread Started
Test thread Started YIELD
YIELD
Test thread Started SLEEP
Test thread Started NONE
NONE
NONE
NONE
NONE
NONE
NONE
NONE
NONE
NONE
NONE
Test thread Finished NONE
SLEEP
YIELD
YIELD
SLEEP
YIELD
SLEEP
YIELD
YIELD
YIELD
SLEEP
YIELD
SLEEP
YIELD
YIELD
Test thread Finished YIELD
SLEEP
SLEEP
SLEEP
SLEEP
SLEEP
Test thread Finished SLEEP
Main thread Finished

●メモ
sleepは、少なくとも設定したmilisecondの間、スレッドをsleep状態(実行不可能)にする。
yield()は、スレッドを実行可能状態に戻す。別のスレッドで同じ優先度のものがあればそれが実行されるかもしれない。でも再び同じスレッドが実行されることもある。
スレッドのtime slicingの時間は、JVM?稼働環境?依存、スレッドがどのように実行されるかも処理系やタイミング依存なので、それに依存しないコードを書かないといけない。
サンプルプログラムは、YIELDのスレッドが先に実行しているがいったんスレッドを実行可能状態に戻しているため、NORMALのスレッドが先に実行されている。
システム開発 | permalink | comments(0) | trackbacks(0)

スポンサーサイト

- | permalink | - | -

この記事に対するコメント

コメントする









この記事のURL

http://spw.jugem.jp/?eid=863 [記事を編集する]
この記事のトラックバックURL
トラックバック機能は終了しました。
※注意:スパム対策のため、この記事のURLへのリンクのないトラックバックはすべて受付できません。
この記事に対するトラックバック