//调用方式
Callable<String> clazz = new PushReport(infos.toString(),account);
NewThreadUtil.pushMessage(clazz);
package com.aaa.sms.util;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent. edBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @ClassName: NewThreadUtil
* @date 2018年3月9日 下午2:16:47
*
*/
public class NewThreadUtil{
// Callable<T> clazz;
// public NewThreadUtil(Callable<T> clazz){
// this.clazz=clazz;
// }
// Class<T> clazz;
//
// public NewThreadUtil(Class<T> clazz) {
// this.clazz = clazz;
// }
private static final Logger log=LoggerFactory.getLogger(NewThreadUtil.class);
private static Integer corePoolSize = 5;
private static Integer maximumPoolSize = 10;
private static Long keepAliveTime = 10000L;//10分钟
private static Integer queueCapacity = 25;//队列最大等待数
private static ExecutorService executorService = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
java.util.concurrent.TimeUnit.MILLISECONDS, new edBlockingQueue<Runnable>(queueCapacity));
public static void pushMessage(Callable<String> clazz){
log.info(\"推送上行短信:主线程线程名称NewThreadUtil\" + Thread.currentThread().getName());
//Future<String> future 不能写返回值 否则会变成同步
//多线程情况下,主线程try catch捕获不到子线程的throws exception
try {
executorService.submit(clazz);
} catch (Exception e) {
log.info(\"父类处理异常\");
e.printStackTrace();
}
}
public static void shutDown(){
log.info(\"销毁线程池策略:服务停止停止接收消息\");
executorService.shutdownNow();
}
// 正常情况下主方法用try catch能够获取到子方法出现的异常
public static void function() throws NumberFormatException{
String s = \"abc\";
System.out.println(Double.parseDouble(s));
}
public static void main(String[] args) throws Exception{
try {
function();
} catch (NumberFormatException e) {
System.err.println(\"非数据类型不能转换。\");
//e.printStackTrace();
}
}
}
package com.aaa.sms.task;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.Callable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.anxinjie.AnXinJieUtil;
import com.credithc.sms.dto.SmsAccountDTO;
import com.credithc.sms.listeners.InitDatasListener;
import com.credithc.sms.service.ISmsAccountService;
import com.credithc.sms.util.ToolSpring;
/**
*
* @ClassName: PushReport
* @date 2018年3月15日 下午5:57:45
*
*/
public class PushReport implements Callable<String> {
private static final Logger log=LoggerFactory.getLogger(PushReport.class);
private String report;
private String accoutId;
public PushReport(String report,String accoutId){
this.report=report;
this.accoutId=accoutId;
}
public PushReport(){
}
@Override
public String call() throws Exception {
log.info(\"推送状态:线程名称\"+Thread.currentThread().getName());
ISmsAccountService ismsAccountService=(ISmsAccountService) ToolSpring.getBean(\"ismsAccountService\");
String url = null;
SmsAccountDTO smsAccount = new SmsAccountDTO();
smsAccount.setSmsAccountId(accoutId);
try {
SmsAccountDTO accounts = ismsAccountService.qrySmsAccountById(smsAccount);
if (\"1\".equals(accounts.getIsPush())) {
url = InitDatasListener.getPropertie(accounts.getSmsMappingSystem() + \"_pushReport_url\");
System.out.println(accoutId+\"获取状态请求地址\"+url);
System.out.println(accoutId+\"获取状态报告请求内容\"+\"message=\"+report);
String result=AnXinJieUtil.postURL(\"message=\"+report, url);
System.out.println(accoutId+\"获取状态返回结果\"+result);
}
} catch (Exception e) {
e.printStackTrace();
}
return \"ok\";
}
}
继续阅读与本文标签相同的文章
下一篇 :
关于PLSQL无法正确显示中文
-
《Android应用开发进阶》| 每日读本书
2026-05-18栏目: 教程
-
“阿里云十年,因为有我而不同”,征文活动开始了!
2026-05-18栏目: 教程
-
玩转 Drone CI
2026-05-18栏目: 教程
-
有关阿里云对SaaS行业的思考,看这一篇就够了
2026-05-18栏目: 教程
-
深入剖析 Delta Lake:详解事务日志
2026-05-18栏目: 教程
