一个线程接收输入,另一个打印它

时间:2017-04-09 14:31:33

标签: java multithreading concurrency interrupt

我有一个关于多线程的问题。我还是新手。

我有一个主程序,其唯一的功能是调用输入线程和打印机线程,然后它什么都不做。

输入线程检查控制台中是否有输入。如果是,它应该打断打印机线程。除非它是" q",否则输入线程将进入休眠状态,然后再次检查是否还有输入

打印机线程应该检查它是否被中断。如果是,它应该打印输入。

我认为我可以使用通知作为替代方案,但我也不知道如何使用通知。

这是我的代码。它目前出现错误

import java.util.Scanner;

public class Q2 {

public static void main(String[] args) {
    /* creating a new thread and starting it */
    Thread InThread = new Thread(new InputThread());
    Thread PrintThread = new Thread(new PrinterThread());
    InThread.start();
    PrintThread.start();
}
}

class InputThread implements Runnable {

public static String theLine;

/* constructor for thread */
public InputThread() {
}

public void run() {
    Scanner scan = new Scanner(System.in);
    try {
        System.out.println("Enter an input: ");
        System.out.println("Press <Q> to exit");
        theLine = scan.nextLine();
        while (!theLine.equalsIgnoreCase("Q")) { 
            notify();
            Thread.sleep(3000);
            theLine = scan.nextLine();
        }
        System.out.println("String input complete...");
    } catch (Exception e) {
        System.out.println("Error has occured!");
    }

    return;

}
}

class PrinterThread implements Runnable {

/* constructor for thread */
public PrinterThread() {
}

public void run() {
    while (true) {
        try {
            wait();
            if(!InputThread.theLine.equalsIgnoreCase("Q")){
                System.out.println(InputThread.theLine);
            }else{
                return;
            }
        }catch(InterruptedException e){
            System.out.println("Thread was interrupted");
            return;
        }

    }

}
}

在这种情况下,我大多不知道如何使用notify(),wait()和interrupt()。

0 个答案:

没有答案