gpt4 book ai didi

java - 为什么我的 PipedOutputStream 死锁了?

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:18 28 4
gpt4 key购买 nike

我正在尝试使用 PipedInputStream 和 PipedOutputStream 实现一个线程循环缓冲区,但每次当我进入 Decoder runnable 中的 mHead.write 时它都会锁定。我认为使用单独的线程时不会出现死锁。

    private class DecoderTask implements Runnable{

@Override
public void run() {
while(!mStop){
try {
Log.d(TAG,"trying to write");
mHead.write(decode( 0, 1000));
mHead.flush();
Log.d(TAG,"Decoded");
} catch (DecoderException e) {
Log.e(TAG,e.toString());
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
}

}
private class WriteTask implements Runnable{

@Override
public void run() {
while(!mStop){
try {
Log.d(TAG,"trying to read");
int read = mTail.read(mByteSlave, 0, mByteSlave.length);
mAudioTrack.flush();
mAudioTrack.write(mByteSlave,0,read);
Log.d(TAG,"read");
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
}

}


//in some function
mTail = new PipedInputStream();
mHead = new PipedOutputStream(mTail);
mByteSlave = new byte[BUF];
mT1 = new Thread(new DecoderTask(), "Reader");
mT2 = new Thread(new WriteTask(), "Writer");
mT1.start();
mT2.start();
return;

编辑:这是我的服务的完整来源 http://pastie.org/1179792

logcat 打印出来:

尝试阅读
努力写

最佳答案

我遇到过同样的问题并通过覆盖默认值解决了 PIPE_SIZEPipedInputStream(int)构造函数。方法PipedOutputStream.write(byte[], int, int)阻塞,直到所有字节都写入输出流。这可能是默认 PIPE_SIZE 的问题。

毕竟,大小很重要 ;-)

关于java - 为什么我的 PipedOutputStream 死锁了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784914/

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