相关疑难解决方法(0)

使用Java中的两个线程打印偶数和奇数

我试过下面的代码.我从其他一些帖子中获取了这段代码,这些帖子根据作者是正确的.但是当我尝试跑步时,它并没有给我确切的结果.

这主要是按顺序打印偶数和奇数值.

public class PrintEvenOddTester {



    public static void main(String ... args){
        Printer print = new Printer(false);
        Thread t1 = new Thread(new TaskEvenOdd(print));
        Thread t2 = new Thread(new TaskEvenOdd(print));
        t1.start();
        t2.start();
    }


}



class TaskEvenOdd implements Runnable {

    int number=1;
    Printer print;

    TaskEvenOdd(Printer print){
        this.print = print;
    }

    @Override
    public void run() {

        System.out.println("Run method");
        while(number<10){

            if(number%2 == 0){
                System.out.println("Number is :"+ number);
                print.printEven(number);
                number+=2;
            }
            else {
                System.out.println("Number is :"+ number);
                print.printOdd(number);
                number+=2;
            }
        }

      }

    }

class Printer …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization

20
推荐指数
4
解决办法
14万
查看次数

使用线程进行奇数偶数打印

奇数偶数打印使用thread.Create一个线程类,两个线程实例.一个将打印奇数,另一个将打印偶数.

我做了以下编码.但它涉及死锁状态.有人可以解释一下可能是什么原因吗?

public class NumberPrinter implements Runnable{
private String type;
private static boolean oddTurn=true;


public NumberPrinter(String type){
    this.type=type;
}
public void run() {
    int i=type.equals("odd")?1:2;
    while(i<10){
        if(type.equals("odd"))
            printOdd(i);
        if(type.equals("even"))
            printEven(i);
        i=i+2;
    }

}

private synchronized void printOdd(int i){
    while(!oddTurn){
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    System.out.println(type + i);
    oddTurn=false;
    notifyAll();
}

private synchronized  void printEven(int i){
    while(oddTurn){
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }
    }
    System.out.println(type + i);
    oddTurn=true;
    notifyAll();

}

public …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-safety

7
推荐指数
1
解决办法
1万
查看次数