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