(办公)访问其他系统接口httpClient,异步访问
程序员文章站
2022-05-08 18:03:42
访问其他系统接口httpClient,但是都是同步的,同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请求可以同时塞入缓冲区,不阻塞当前的线程; httpClient请求,访问其他系统可能无响应,锁死,访问请求上线种种问题,这些问题就像苍蝇嗡嗡嗡的在你耳边,那么解决他 ......
访问其他系统接口httpclient,但是都是同步的,同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请求可以同时塞入缓冲区,不阻塞当前的线程;
httpclient请求,访问其他系统可能无响应,锁死,访问请求上线种种问题,这些问题就像苍蝇嗡嗡嗡的在你耳边,那么解决他可以设置超时时间,但是访问一个接口将近1分钟,这个是不应该的,所以还是要异步请求其他系统的接口,我们可以使用多线程来做,建立一个线程池,只指定10个线程,然后调用方法。(好主意)
下面是举个springmvc的例子:
1.往springmvc里添加线程池
application.xml里添加 xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd <bean id="taskexecutor" class="org.springframework.scheduling.concurrent.threadpooltaskexecutor"> <!-- 核心线程数 --> <property name="corepoolsize" value="10" /> <!-- 最大线程数 --> <property name="maxpoolsize" value="10" /> <!-- 队列最大长度 --> <property name="queuecapacity" value="500" /> <!-- 线程池维护线程所允许的空闲时间,默认为60s --> <property name="keepaliveseconds" value="200" /> </bean>
2.操作:
//自定义线程池: @resource private taskexecutor taskexecutor; try { taskexecutor.execute(new runnable() { public void run() { //这里编写处理业务代码
//注意方法传递参数的时候,尽量使用基本类型的值。 } }); } catch (exception e) { e.printstacktrace(); }
上一篇: 真佩服自己
下一篇: 前两天去参加朋友的婚礼