由於線程之間存在資源的競爭,所有根據CPU的調節,線程的執行先後是隨機的。
如果某些線程執行的時候,希望獨佔CPU資源,可以使用Semaphore信號量。
線程的定義可以如下:
import java.util.concurrent.Semaphore;
public class SubThread extends Thread{
private Semaphore semaphore;
public SubThread(Semaphore semaphore){
this.semaphore=semaphore;
}
public Semaphore getSemaphore() {
return semaphore;
}
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
while( i < 100){
i++;
System.out.println("No."+i+" Sub thread11111111 is running!");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
semaphore.release();
}
}
該線程的利用方法如下:
public static void main(String[] args) {
try {
SubThread subThread = new SubThread(new Semaphore(0));
SubThread2 subThread2 = new SubThread2();
SubThread3 subThread3 = new SubThread3();
subThread.start();
subThread.getSemaphore().acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread is running!");
}
該線程會執行完再執行接下來的代碼。