java - 分别用线程 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
解决方案
推荐阅读
- macos - macOS Sierra Apache 2:全局设置“ServerName”指令以禁止显示此消息
- c++ - 如何在 MSVC 的原始字符串文字中使用 Unicode 符号/表情符号
- vimeo - 无效状态错误。Vimeo 视频播放正常但抛出异常
- function - 计算上限和下限
- ssis - ssis OLE DB 目标性能改进
- c++ - 如何在 C++ 中删除密码屏蔽
- redis - 如何找到 Embedded Redis 端口并终止 Embedded Redis 服务器
- javascript - d3.js - exit() 上的 rect 没有被删除
- html - 如何使标题 div 大小固定且正文可滚动?
- java - 使用 maven-shade-plugin 读取资源文件 uber jar 构建