当某些线程执行任务时,阻止特定线程参与线程调度程序

时间:2013-10-21 09:38:28

标签: java multithreading

我只是想像往常一样运行一些线程,我不关心他们如何以及何时在彼此之间切换。但是剩下的最后一个线程在其他线程运行时不应该参与 我已经通过设置低优先级到最后一个线程来尝试它但它不起作用并且它在更高优先级的线程之间切换。

我得到了“一点点”的解决方案,这与下面的程序很接近但不完全符合我想做的事情。

class ThreadDemo extends Thread {
static long value=0;
int no;
boolean flag;
public ThreadDemo(int no,boolean flag) {
    this.no=no;
    this.flag=flag;
}

public void run() {
    int i=0; 
    boolean tempf=true;
        while(tempf) {
        if(flag == true || value >= 30) {
            while(i<10) {
                try{sleep(100);} catch(Exception e) {}
                System.out.println("Thread # "+no+" is "+i);
                i++;
                value++;
            }
            tempf=false;
        }
    }
}

}

然后像这样在主类中调用它

    ThreadDemo th1 = new ThreadDemo(1,true);
    ThreadDemo th2 = new ThreadDemo(2,true);
    ThreadDemo th3 = new ThreadDemo(3,true);
    ThreadDemo th4 = new ThreadDemo(4,false);  

    th1.start();
    th2.start();
    th3.start();
    th4.start();

这里我想在完成所有三个线程后执行th4的run()方法。但它实际上调用了run()方法,并且还在其他线程之间进行切换 如果您想要一些澄清或信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

试试这个。

 ThreadDemo th1 = new ThreadDemo(1,true);
    ThreadDemo th2 = new ThreadDemo(2,true);
    ThreadDemo th3 = new ThreadDemo(3,true);
    ThreadDemo th4 = new ThreadDemo(4,true);  

    th1.start();
    th2.start();
    th3.start();
th1.join();
th2.join();
th3.join();
    th4.start();