首页 > 解决方案 > 分别用线程 T1 和 T2 打印奇偶数,如果素数来了,则以相反的顺序打印

问题描述

我最近接受了摩根士丹利的采访,被问到这个问题。我必须在线程 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

标签: javamultithreading

解决方案


推荐阅读