多线程调用指标
来源:互联网 发布:淘宝同行活动来源分析 编辑:程序博客网 时间:2024/06/02 05:05
直接看代码:
Java Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
List<ParamBean> paramBeanList = new LinkedList<>();
//第一个指标开始:风控报表1-主要市场指数变化
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_INDEXQUOTE", endDate), "RISKCONTROL_PRODUCT_INDEXQUOTE"));
//第二个指标开始:风控报表1-组合回撤止损检查
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_RETRACEMENT", fundType, endDate), "RISKCONTROL_PRODUCT_RETRACEMENT"));
//第三个指标开始:风控报表-亏损超过20%个股-->没有发布
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_LOSSTHANTWENTY", fundType, endDate), "RISKCONTROL_PRODUCT_LOSSTHANTWENTY"));
//第四个指标开始:风控报表-股票持仓及组合净资产
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_REALPOSITION", fundType, endDate), "RISKCONTROL_PRODUCT_REALPOSITION"));
Map<String, ParamBean> paramMap = new HashMap<>();
for (ParamBean paramBean : paramBeanList)
{
paramMap.put(paramBean.getIndexName(), paramBean);
}
Map<String, Map<String, Object>> syncIndexCallback = syncIndexCallback(paramBeanList, paramMap);
/**
* 开启多线程调用指标
* @param paramBeanList
* @param paramMap
* @return
*/
private Map<String, Map<String, Object>> syncIndexCallback(List<ParamBean> paramBeanList, Map<String, ParamBean> paramMap)
{
Map<String, Map<String, Object>> syncResultMap = new HashMap<>();
int taskSize = 4;
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
List<Future<Map<String, Map<String, Object>>>> futureList = new ArrayList<>();
Callable<Map<String, Map<String, Object>>> call = null;
// exe task
for (String indicatorName : paramMap.keySet())
{
final ParamBean paramBean = paramMap.get(indicatorName);
call = new Callable<Map<String, Map<String, Object>>>()
{
@Override
public Map<String, Map<String, Object>> call() throws Exception
{
Map<String, Object> callIndex = callIndex(paramBean.getDate(), paramBean.getRequestParam(), paramBean.getIndexName());
Map<String, Map<String, Object>> resultMap = new HashMap<>();
resultMap.put(paramBean.getIndexName(), callIndex);
return resultMap;
}
};
futureList.add(pool.submit(call));
}
for(int k = 0; k < paramBeanList.size(); k++)
{
Future<Map<String, Map<String, Object>>> future = futureList.get(k);
try
{
Boolean flag = future.isDone();
while ((null == flag) || !flag)
{
Thread.sleep(1000);
flag = future.isDone();
}
if (null != future && future.isDone() && future.get() != null)
{
syncResultMap.putAll(future.get());
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
future = null;
}
pool.shutdown();
pool = null;// help GC
futureList = null;
return syncResultMap;
//***multi thread over
}
class ParamBean
{
private String date ;
private String requestParam;
private String indexName;
public String getDate()
{
return date;
}
public void setDate(String date)
{
this.date = date;
}
public String getRequestParam()
{
return requestParam;
}
public void setRequestParam(String requestParam)
{
this.requestParam = requestParam;
}
public String getIndexName()
{
return indexName;
}
public void setIndexName(String indexName)
{
this.indexName = indexName;
}
public ParamBean()
{
}
public ParamBean(String date, String requestParam, String indexName)
{
this.date = date;
this.requestParam = requestParam;
this.indexName = indexName;
}
@Override
public String toString()
{
return "ParamBean [date=" + date + ", requestParam=" + requestParam + ", indexName=" + indexName + "]";
}
}
//第一个指标开始:风控报表1-主要市场指数变化
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_INDEXQUOTE", endDate), "RISKCONTROL_PRODUCT_INDEXQUOTE"));
//第二个指标开始:风控报表1-组合回撤止损检查
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_RETRACEMENT", fundType, endDate), "RISKCONTROL_PRODUCT_RETRACEMENT"));
//第三个指标开始:风控报表-亏损超过20%个股-->没有发布
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_LOSSTHANTWENTY", fundType, endDate), "RISKCONTROL_PRODUCT_LOSSTHANTWENTY"));
//第四个指标开始:风控报表-股票持仓及组合净资产
paramBeanList.add(new ParamBean(endDate, requestParams("RISKCONTROL_PRODUCT_REALPOSITION", fundType, endDate), "RISKCONTROL_PRODUCT_REALPOSITION"));
Map<String, ParamBean> paramMap = new HashMap<>();
for (ParamBean paramBean : paramBeanList)
{
paramMap.put(paramBean.getIndexName(), paramBean);
}
Map<String, Map<String, Object>> syncIndexCallback = syncIndexCallback(paramBeanList, paramMap);
/**
* 开启多线程调用指标
* @param paramBeanList
* @param paramMap
* @return
*/
private Map<String, Map<String, Object>> syncIndexCallback(List<ParamBean> paramBeanList, Map<String, ParamBean> paramMap)
{
Map<String, Map<String, Object>> syncResultMap = new HashMap<>();
int taskSize = 4;
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
List<Future<Map<String, Map<String, Object>>>> futureList = new ArrayList<>();
Callable<Map<String, Map<String, Object>>> call = null;
// exe task
for (String indicatorName : paramMap.keySet())
{
final ParamBean paramBean = paramMap.get(indicatorName);
call = new Callable<Map<String, Map<String, Object>>>()
{
@Override
public Map<String, Map<String, Object>> call() throws Exception
{
Map<String, Object> callIndex = callIndex(paramBean.getDate(), paramBean.getRequestParam(), paramBean.getIndexName());
Map<String, Map<String, Object>> resultMap = new HashMap<>();
resultMap.put(paramBean.getIndexName(), callIndex);
return resultMap;
}
};
futureList.add(pool.submit(call));
}
for(int k = 0; k < paramBeanList.size(); k++)
{
Future<Map<String, Map<String, Object>>> future = futureList.get(k);
try
{
Boolean flag = future.isDone();
while ((null == flag) || !flag)
{
Thread.sleep(1000);
flag = future.isDone();
}
if (null != future && future.isDone() && future.get() != null)
{
syncResultMap.putAll(future.get());
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
future = null;
}
pool.shutdown();
pool = null;// help GC
futureList = null;
return syncResultMap;
//***multi thread over
}
class ParamBean
{
private String date ;
private String requestParam;
private String indexName;
public String getDate()
{
return date;
}
public void setDate(String date)
{
this.date = date;
}
public String getRequestParam()
{
return requestParam;
}
public void setRequestParam(String requestParam)
{
this.requestParam = requestParam;
}
public String getIndexName()
{
return indexName;
}
public void setIndexName(String indexName)
{
this.indexName = indexName;
}
public ParamBean()
{
}
public ParamBean(String date, String requestParam, String indexName)
{
this.date = date;
this.requestParam = requestParam;
this.indexName = indexName;
}
@Override
public String toString()
{
return "ParamBean [date=" + date + ", requestParam=" + requestParam + ", indexName=" + indexName + "]";
}
}
阅读全文
0 0
- 多线程调用指标
- 多线程代码评价指标
- 带参数多线程调用
- 线程调用,多线程
- 多线程调用DataGridView
- 多线程调用同一个函数
- 多线程调用COM实例
- 多线程中方法调用
- 堆栈调用解析多线程
- avcodec_open多线程调用问题
- SimpleDateFormat多线程调用问题
- 多线程调用函数理解
- VC++多线程函数调用
- Java多线程调用
- 多线程与异步调用
- 多线程HttpClient调用
- libevent 多线程调用event_base
- 多线程halcon调用实现
- umount
- JDBC(二)
- 阿里云服务器被挖矿问题
- 模仿的手艺
- android系统及日志用法
- 多线程调用指标
- 记一个ajax下载的坑.md
- 飞天专有云敏捷版2.0:容器引领新一代敏捷革命,深度学习和区块链路加速业务创新
- sqlserver 去重查询distinct
- 肤色检测与分割方法
- linux下copy文件时出现cp: omitting directory的报错
- ASP.NET WebAPi之断点续传下载(上)
- Net使用Microsoft.Office.Interop.Excel;创建Excel文件(插入数据、修改格式、生成图表)的方法,以及Excel查看加密
- pyQt5-拖拽