gpt4 book ai didi

Java:向另一个线程抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:33 25 4
gpt4 key购买 nike

我有这样的java代码:

private class Uploader implements Runnable
{
// ...

public void start()
{
t.start();
}

public void run()
{
try {

while(i=in.read())
{
output.write(i); // THIS IS A BLOCKING CALL !!
}

} catch(ProtocolException e) { ... }
catch(IOException e1) { ... }
}

private void restore()
{
...
}

private class Checker implements Runnable
{
// ...

@Override
public void run()
{
// I WANT (IN A PARTICULAR MOMENT) TO THROW AN
// EXCEPTION INTO THE Uploader RUN METHOD FROM HERE,
// IS IT POSSIBLE?
}
}
}

问题是我在 Run() 方法中有一个阻塞的 write(),所以我添加了一个检查连接是否正在传输的新线程:如果它没有传输,我想使用异常机制停止阻塞 write() (从检查线程向另一个线程的 run() 方法抛出异常)。可能吗?

编辑[已解决]:

唯一的办法是粗暴地关闭输出流,并处理写入的比特数以检查连接是否正在传输:

private class Uploader implements Runnable
{
private OutputStream output;

private int readedBits;

public void run()
{
try {

while(i=in.read())
{
output.write(i);

readedBits++;
}

} catch(IOException e1)
{
// ENTERS HERE IF RESTORE() IS CALLED
}
}

private void restore()
{
try {
output.close();
} catch (IOException e) {}

// Restore connection ....
}

private int getReadedBits()
{
return this.readedBits;
}

private class Checker implements Runnable
{
// ...

@Override
public void run()
{
while(true)
{
try {
Thread.sleep(timeout);
} catch (InterruptedException e1) {}

if(lastReaded >= getReadedBits())
restore();
else
lastReaded = getReadedBits();
}
}
}
}

最佳答案

您可以让您的代码接受 Thread.interrupt() 调用。请参阅此调用的 javadoc。

关于Java:向另一个线程抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355149/

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