gpt4 book ai didi

Java多线程打印奇数和偶数

转载 作者:行者123 更新时间:2023-12-01 19:55:54 24 4
gpt4 key购买 nike

我已经开始学习java中的线程。我编写了一个代码来按顺序打印奇数和偶数。但我得到的输出是两倍。下面是我的代码。

ThreadBasic1.java:

public class ThreadBasic1 {

public static void main(String[] args) {


Thread t1 = new Thread(new ThreadImplementation1());
Thread t2 = new Thread(new ThreadImplementation1());

t1.start();
t2.start();

}
}

ThreadImplementation1.java:

public class ThreadImplementation1 implements Runnable {

boolean isOdd= false;
@Override
public void run() {
System.out.println("thread started :: Thread name :: " + Thread.currentThread());
try {
for(int i = 1 ; i < 10 ; i++) {
if(i %2 ==0) {
printEven(i);
}
else {
printOdd(i);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}





synchronized void printEven(int number)throws InterruptedException {
while(!isOdd){
try {

wait();

} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Even:"+number);
isOdd = false;
notifyAll();
}
synchronized void printOdd(int number) throws InterruptedException {

while (isOdd) {

try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.println("Odd :"+number);

isOdd = true;
notifyAll();
}

}

输出:

thread started :: Thread name :: Thread[Thread-1,5,main]
Odd :1
Even:2
Odd :3
Even:4
Odd :5
Even:6
Odd :7
Even:8
Odd :9
thread started :: Thread name :: Thread[Thread-0,5,main]
Odd :1
Even:2
Odd :3
Even:4
Odd :5
Even:6
Odd :7
Even:8
Odd :9

最佳答案

您的问题很简单:您有两个执行完全相同操作的线程:打印从 1 到 9 的数字。

通常,此类练习要求每个线程的代码略有不同。一个线程打印奇数,另一个线程打印偶数。然后两个线程都需要进入锁步,以获得正确的 1 2 3 4 输出。或者您有“一个”线程实现,但您以某种方式能够配置该线程的行为。

因此,这里的答案是退后一步,重新思考你的整个方法。让两个线程做相同的事情是没有意义的。这仅仅意味着您重复某些行为。相反,弄清楚如何对齐两种不同的行为。

当然,我不会为您提供代码:练习的重点是将这些想法转化为代码。

关于Java多线程打印奇数和偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com