分别使用线程T1和T2打印奇数和偶数。如果质数到来,则以相反的顺序打印

时间:2018-08-28 19:55:18

标签: java multithreading

我最近接受了摩根士丹利的采访,并被问到这个问题。我必须在线程T1运行时打印所有奇数,而在T2运行时打印偶数,但是!还有更多的东西,如果出现任何素数,那么我不得不颠倒顺序,这意味着现在T2为奇数,T1为偶数。

以下是我尝试过的尝试,但是那个人看着我,就像他想将我送入监狱以寻求解决方案。我是多线程的新手。可能存在一种使用notify()wait()方法在多个线程之间建立通信以实现此目的的方法。有人可以把我从那个监狱里拉出来吗?

public class MainClass extends Thread {
    @Override
    public void run() {
        for(int i=0;i<20;i++) {
            String tname = Thread.currentThread().getName();
            if(isPrime(i)) {
                switch(tname) {
                    case "T2":
                        if(i%2 != 0)
                        System.out.println(tname + " - "+i);
                        break;
                    case "T1":
                        if(i%2 == 0)
                        System.out.println(tname + " - "+i);
                        break;
                    default:break;
                }
            }else {
                switch(tname) {
                    case "T1":
                        if(i%2 != 0)
                        System.out.println(tname + " - "+i);
                        break;
                    case "T2":
                        if(i%2 == 0)
                        System.out.println(tname + " - "+i);
                        break;
                    default:break;
                }
            }
        }
    }
    public boolean isPrime(int num) {
        if(num <= 1) return false;
        if(num == 2) return true;
        for(int i=2;i<=num/2;i++) {
            if(num%i == 0)
            return false;
        }
        return true;
    }
    public MainClass(String name) {
        super(name);
    }
    public static void main(String[] args) {
        MainClass t1 = new MainClass("T1");
        MainClass t2 = new MainClass("T2");
        t1.start();
        try {
            t1.join();//always keep it inside the try otherwise compile time error
        }catch(InterruptedException ie) {
            ie.printStackTrace();
        }
        t2.start();
    }
}

这是输出。

T1 - 1
T1 - 2
T1 - 9
T1 - 15
T2 - 0
T2 - 3
T2 - 4
T2 - 5
T2 - 6
T2 - 7
T2 - 8
T2 - 10
T2 - 11
T2 - 12
T2 - 13
T2 - 14
T2 - 16
T2 - 17
T2 - 18
T2 - 19

0 个答案:

没有答案