ttp onnection问题-关于httpURLConnnection 是否可以阻塞式的获取数据

问题描述

关于httpURLConnnection 是否可以阻塞式的获取数据

用httpconnection做获取数据的操作,在建立了connection实体后,直接调用getResponseCode(),然后直接返回流读写异常。我设置了5秒超时,但是根本就没有执行5秒。
类似于httpClient的话,他的execute可以阻塞,我设置5秒超时,他会等5秒,没获取到数据然后抛异常。我想知道httpconnection能否类似的做到。貌似connect()方法是会阻塞,但是后面加上getResponseCode()或者getInputStream()又会直接抛异常,设了超时根本就不等待了。不知道有大神能帮下不。

解决方案

报错信息都贴出来看看吧。

解决方案二:

不是错误 比如这段代码
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);

        conn.setRequestMethod("GET");
        conn.connect();
        int code = conn.getResponseCode();

        在设置了5000ms的超时后,程序在执行 conn.connect(); 后没有阻塞,继续往下执行,在 int code = conn.getResponseCode(); 由于调用 getInputStream(),而抛出IO异常。没等5秒。

        HttpGet getMethod = new HttpGet(url);
     HttpClient httpClient = getHttpClient();
        HttpResponse response = httpClient.execute(getMethod);
        if(response.getStatusLine().getStatusCode() == 200)

        上面的代码,我给httpclient设置了5000毫秒的超时,程序执行到 httpClient.execute(getMethod) ,如果没有活得数据,会阻塞式的一直获取,直到5秒秒超时,抛出超时异常。

        我希望的是httpConnection 可以有类似的方法,会阻塞式的获取数据,能体现出有5秒的等待。
时间: 2024-09-15 10:44:27

ttp onnection问题-关于httpURLConnnection 是否可以阻塞式的获取数据的相关文章

使用阻塞式队列处理大数据

前言 我们都知道,JAVA对于文本文件在读时是独占的,即使可以用多线程去读也涉及到一个POS(定位读)的问题,这在设计框架上会带来许多的复杂性,同时也带来代码上的不可维护性以及会经常出一些千奇百怪的错误(多线程程序由其如此). 传统阻塞式做法的敝病 特点:多线程,阻塞式导入 缺点:阻塞式,导入速度慢,线程状态无法精确记录,速度慢内存开销大 优秀的做法 多线程 非阻塞式 内存开销恒定 线程可以自由增加 我们将采用的做法 在数据提取的设计时基于以下几个指标考虑: 1)内存占用数始终必须恒定值 2)使

《Java NIO文档》非阻塞式服务器

即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel,Buffer等组件),但是想要设计一个非阻塞的服务器仍然是一件很困难的事.非阻塞式服务器相较于阻塞式来说要多上许多挑战.本文将会讨论非阻塞式服务器的主要几个难题,并针对这些难题给出一些可能的解决方案. 查找关于非阻塞式服务器设计方面的资料实在不太容易,所以本文提供的解决方案都是基于本人工作和想法上的.如果各位有其他的替代方案或者更好的想法,我会很乐意听取这些方案和想法!你可以在文章下方留下你的评论,或者发邮件给我(

java 阻塞式socket+多任务处理

问题描述 小菜最近碰到一个问题,采用多线程socket通信模式,有多个客户机可能发送处理请求.server端的serversocket每接受一个任务请求,就往任务队列添加一个任务,然后返回任务状态给客户端.这时候有另外一个任务处理线程,只要任务队列不为空就取一个出来处理.整个流程就是这样,应该采用什么方式来设计.我把任务处理线程也设计成阻塞式线程了,结果就是只有一个线程能执行.. 解决方案 解决方案二:应该用生产者消费者模式来设计吧,具体实现几句话说不清楚,楼主自己摸索吧,任务处理线程这地方有点

php-PHP被阻塞情况下输出数据 ob_flush不管用

问题描述 PHP被阻塞情况下输出数据 ob_flush不管用 ob_start(); for($i=0;$i<20;$i++){ //...耗时的操作 3秒钟 echo "ABC"; ob_flush(); } 运行的时候,需要1分钟才能显示ABC,怎样一条条的出来,3秒钟得出来一次呀? 谢谢解答在线等~ 解决方案 @ob_flush(); for($i=0;$i<20;$i++){ //...耗时的操作 3秒钟 echo "ABC" . str_rep

《并行计算的编程模型》一1.5 非阻塞式通信

1.5 非阻塞式通信 非阻塞式通信方式是MPI的重要特性之一.非阻塞式通信初始化后,不需等待通信完成后再进行操作.该特性具有两个优势:一是非阻塞式通信实现了通信与其他计算等操作异步执行:二是针对复杂的通信模式,不需要严格的通信顺序和内存空间管理.为了更好地理解第二个优势,执行如下代码,其中partner是其他进程的进程号. MPI_Send需要将buf中的1亿个整数发送到partner进程上.若发送操作未申请到内存,程序将处于等待状态,直到内存申请成功.同理,调用MPI_Recv等接收操作后,也

Java多线程程序非阻塞式锁定实现

Java对多线程程序的锁定已经有良好的支持,通常使用synchronized修饰一个方法或者一段代码.但是有一个问题,多个线程同时调用同一个方法的时候,所有线程都被排队处理了.该被调用的方法越耗时,线程越多的时候,等待的线程等待的时间也就越长,甚至于几分钟或者几十分钟.对于Web等对反应时间要求很高的系统来说,这是不可以接受的.本文就介绍一种自己实现的锁定方法,可以在没有拿到锁之后马上返回,告诉客户稍候重试. 某一段程序同一时刻需要保证只能单线程调用,那么策略很简单,最先到的线程获取锁成功,在它

网络编程中阻塞式IO的真正含义到底是什么

问题描述 这两天在看socket编程,可以说这方面是个新手,其中看到了nio,网上有很多文章介绍了nio相对于多线程处理网络链接(每建立一个socket链接,服务器便会开启一个线程来对此socket单独处理和客户端的通信)的优点.因为nio是事件驱动,不会发生Socket读取流数据时的阻塞.我想问的是这里所说的读取流数据的阻塞是我们平时所说的线程进入阻塞态吗?当一个线程单独处理一个客户端请求时,它需要等待客户端向它的输出流写入数据,完后服务器端处理此socket的线程才能读取数据,如果客户端未写

Linux IO模型漫谈(3) -- 阻塞式IO实现

在理解代码前有几个函数先说一下: 1 sockaddr_in 套接字地址结构 1 2 3 4 5 6 7 8 9 10 struct sockaddr_in {     uint8_t         sin_len;        //长度字段,这个sockaddr_in结构的长度,一般不用设置和检查它     sa_family_t     sin_family;     //协议族,TCP,UDP等协议族就设置为AF_INET      in_port_t       sin_port; 

canal DevGuide

背景    先前开源了一个开源项目: [阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费]     本文主要是介绍一下如何给canal贡献代码,介绍其设计思路和扩展方式   设计  说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列  (1个server对应1..n个instance) instance下的子模块: eventParser (数据源接入,模拟slave协议和master进行交互,协议解析) eventSink