由于线程之间存在资源的竞争,所有根据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!");
}
该线程会执行完再执行接下来的代码。