线程不会同时执行

时间:2014-05-18 14:04:59

标签: java multithreading

我有三个线程,每个线程必须定期对相同类(Q)的实例(q)进行一些操作(这就是我在方法somecheck中使用Thread.sleep()的原因)。主要任务是不要同时执行线程,因此一次只能执行一个线程。 我试图将每个线程的run方法的内容放入synchronized(q){},但我不明白将notify和wait方法放在何处。

class Q {
        boolean somecheck(int threadSleepTime){
        //somecheck__section, if I want to stop thread - return false;

            try{
            Thread.sleep(threadSleepTime);
            } catch (InterruptedException e) {                
            }
            return true;
        }
}



class threadFirst extends Thread  {
    private Q q;
    threadFirst(Q q){this.q=q;}

    public void run(){
        do{
            //Working with object of class Q
        }
        while(q.somecheck(10));
    }
}

class threadSecond extends Thread  {
    private Q q;
    threadSecond(Q q){this.q=q;}

    public void run(){
        do{
            //Working with object of class Q
        }
        while(q.somecheck(15));
    }
}

class threadThird extends Thread  {

    private Q q;
    threadThird(Q q){this.q=q;}

    public void run(){
        do{
            //Working with object of class Q
        }
        while(q.somecheck(20));
    }
}

class run{
    public static void main(String[] args) {
        Q q = new Q();
        threadFirst t1 = new threadFirst(q);
        threadSecond t2 = new threadSecond(q);
        threadThird t3 = new threadThird(q);
        t1.start();
        t2.start();
        t3.start();
    }
}

1 个答案:

答案 0 :(得分:1)

如果在所有方法中使用notify()块,则无需添加任何wait()synchronized方法,例如:

class threadFirst extends Thread {
    ...
    public void run() {
        synchronized (q) {
            //your loop here
        }
    }
    ...
}