相关疑难解决方法(0)

java.lang.Thread.interrupt()做什么?

你能解释一下java.lang.Thread.interrupt()调用时会发生什么吗?

java multithreading

199
推荐指数
5
解决办法
12万
查看次数

如何停止HttpURLConnection.getInputStream()?

以下是我的代码:

private HttpURLConnection connection;
private InputStream is;

public void upload() {
    try {
        URL url = new URL(URLPath);
        connection = (HttpURLConnection) url.openConnection();
        connection.setConnectTimeout(30000);
        connection.setReadTimeout(30000);
        connection.setDoInput(true);
        connection.setUseCaches(false);
        connection.connect();
        is = connection.getInputStream();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void stopupload() {
    connection = null;
    is = null;
}
Run Code Online (Sandbox Code Playgroud)

当我上传文件时,该行将is = connection.getInputStream();花费大量时间来回复.所以我想实现一个停止功能stopupload().但是如果我stopupload()在代码处理时调用is = connection.getInputStream();,它仍然需要等待它的回复.

我希望在实施时立即停止等待stopupload().我该怎么做?

java android httpurlconnection

10
推荐指数
1
解决办法
6486
查看次数

可以从另一个线程安全地调用Disconnect()来取消正在进行的HttpURLConnection吗?

如果我java.net.HttpURLConnection在工作线程中正在接收数据(或将要接收数据),那么disconnect()在另一个线程的连接生命周期的任何时刻调用它来停止它是否安全?

我对此很疑惑,因为我找不到明确记录的方法来中止正在进行的HTTP连接。通过调用中断工作线程Thread.interrupt()将不起作用,因为InputStream您从那里获得的资源HttpURLConnection是不可中断的。

我做了一些看起来像这样的实验:

// MyRequest.run() gets an HttpURLConnection by calling someUrl.openConnection()
MyRequest request = new MyRequest(someUrl);

FutureTask<SomeResult> task = new FutureTask<SomeResult>(request);
someExecutor.execute(task);

// The connection opens, data comes in, ...

// Get the HttpURLConnection from the request, call disconnect()
// Should be part of the cancel() of a FutureTask subclass
request.getConnection().disconnect();    
Run Code Online (Sandbox Code Playgroud)

它似乎可以正常工作,并且它创建的连接和套接字对象最终都将由gc清除。不过,我想知道这是否是正确的方法?disconnect()从另一个线程进行调用会不会有任何问题?

java android

5
推荐指数
1
解决办法
902
查看次数

标签 统计

java ×3

android ×2

httpurlconnection ×1

multithreading ×1