Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以插入到中的InputStream_Java_Concurrency_Io - Fatal编程技术网

Java 可以插入到中的InputStream

Java 可以插入到中的InputStream,java,concurrency,io,Java,Concurrency,Io,是否可以使InputStream与基本InputStream相同,只是当基本流被阻塞时,可以通过调用方法将字节插入流中?草图: public class HackInputStream extends InputStream { public HackInputStream (InputStream base) { /* stuff */ } public int read() throws IOException { /* stuff */ } public void

是否可以使
InputStream
与基本
InputStream
相同,只是当基本流被阻塞时,可以通过调用方法将字节插入流中?草图:

public class HackInputStream extends InputStream {
    public HackInputStream (InputStream base) { /* stuff */ }
    public int read() throws IOException { /* stuff */ }
    public void insertByte(byte b) { /* stuff */ }
}
我只会在基本流被阻塞时插入字节,所以竞争条件不应该成为问题。我尝试使用一个线程来实现这个类,该线程贪婪地将字节从基流读取到
LinkedBlockingQueue
insertByte
将字节直接插入队列,而
read
只是从队列中读取字节,在队列为空时阻塞

这几乎奏效了。。。但是,当我使用
新扫描仪(new HackInputStream(System.in)
)制作
扫描仪时,
nextLine
方法不起作用。不幸的是,我想要这个奇怪的类的第一个原因是解除阻止
扫描仪的锁定

(以下是我试图解决的问题,以防有人有更好的解决方案:

我的程序是一个“shell”,在给定命令时启动任务(线程)。其中一些任务会自行终止,而另一些则不会。我希望在任务终止时立即返回命令提示符,但如果任务从未终止,我希望通过输入换行符来终止它


当前,主线程等待任务终止,而看门狗线程等待换行符,如果收到换行符,则终止任务。现在,如果任务自行终止,我无法在不手动输入换行符的情况下输入命令。看门狗线程被不间断地阻止,它将使用下一行输入no不管怎样,可能会导致下一个命令未读。我正在尝试更改
System.in
,以便以编程方式为其换行。)

更新:如果任务仍在运行,我只需调用
Scanner.nextLine()
就可以用一种简单得多的方法解决问题