マルチスレッドの例
1457 ワード
public class Test implements Runnable{
int i=100;
public static void main(String [] args){
Test th = new Test();
new Thread(th,"sf2:").start();
new Thread(th,"sf1:").start();
new Thread(th,"sf3:").start();
new Thread(th,"sf4:").start();
new Thread(th,"sf5:").start();
new Thread(th,"sf6:").start();
new Thread(th,"sf7:").start();
new Thread(th,"sf8:").start();
new Thread(th,"sf9:").start();
new Thread(th,"sf10:").start();
}
/**
*
*/
public synchronized void run(){
for(;i<1000;i++){
System.out.println(Thread.currentThread().getName()+i);
}
System.out.println(Thread.currentThread().getName());
}
}
結果
sf2:100
sf2:101
sf2:102
sf2:103
.....
sf2:999
sf2:
sf10:
sf9:
sf8:
sf7:
sf6:
sf5:
sf4:
sf3:
sf1:
synchronizedキーワードを使用する場合は、synchronizedメソッドまたはsynchronizedブロックでsleepメソッドまたはyieldメソッドを使用することをできるだけ避けるべきです.synchronizedブロックはオブジェクトロックを占めているので、休憩すると、他のスレッドは目が覚めるのを待って実行するしかありません.効率に深刻な影響を及ぼすだけでなく、論理にも合わない.
同様に、同期ブロック内でyeildメソッドを呼び出すと、CPUリソースがロックされているため、他の反発スレッドは同期ブロックにアクセスできません.もちろん、同期ブロックに関係のないスレッドは、より多くの実行時間を得ることができる.