
java异步多线程执行多数据实例
填坑大人 2018-12-01 12:19:00 浏览233 评论0摘要: java异步多线程执行多数据实例。本例是在数据库中查出来不定量多的数据的时候,如果直接放入线程池,超出线程池缓存队列数的话,会报拒绝异常,所以增加了一个计数器来避免超出线程池缓存队列数。 import java.
java异步多线程执行多数据实例。
本例是在数据库中查出来不定量多的数据的时候,如果直接放入线程池,超出线程池缓存队列数的话,会报拒绝异常,所以增加了一个计数器来避免超出线程池缓存队列数。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.atomic.AtomicInteger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
public class ThreadManager {
/**
* 线程池
*/
private final static ThreadPoolTaskExecutor EXECUTOR = new ThreadPoolTaskExecutor();
/**
* 计数器
*/
private final static AtomicInteger COUNTER = new AtomicInteger(0);
static {
EXECUTOR.setCorePoolSize(5); // 线程池维护线程的最少数量
EXECUTOR.setKeepAliveSeconds(200); // 允许的空闲时间
EXECUTOR.setMaxPoolSize(20); // 线程池维护线程的最大数量
EXECUTOR.setQueueCapacity(50); // 缓存队列
EXECUTOR.initialize();
}
public void sendPost(final String url, final String param) {
synchronized (this) {
while (COUNTER.get() > 50) { // 如果记数器超过40,则等待一段时间
System.out.println("param:" + param + "等待");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
COUNTER.incrementAndGet(); // 任务开始前,计数器加1
}
EXECUTOR.execute(new Runnable() {
@Override
public void run() {
try {
doSendPost(url, param);
} finally {
// 任务完成后,计数器减1
int num = COUNTER.decrementAndGet();
}
}
});
}
// public static void main(String[] args) {
// ThreadManager manager = new ThreadManager();
// 测试执行100次处理
// for (int i = 0; i < 100; i++) {
// manager.sendPost("url", "num:" + i);
// }
// System.out.println("==============");
// }
private static String doSendPost(String url, String param) {
// 具体执行推送
}
}
【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧! 详情请点击 评论 (0) 点赞 (0) 收藏 (0)
相关文章
- 多线程编程学习二(对象及变量的并发访问).
- java-面试-Java并发编程(七)——Executo…
- Java并发编程 - Executor,Executor…
- Java并发编程的艺术(七)——Executors
- 操作系统概念学习笔记 9 线程
- Java中事件分发线程(EDT)与SwingUtilit…
- Java网络编程和NIO详解5:Java 非阻塞 IO …
- java 并发编程 :Executor框架实现java …
- 《Android 源码设计模式解析与实战》——第2章,第…
- [转载].Net线程问题解答