81,122
社区成员




"VM Thread" prio=10 tid=0x00007f06d8089000 nid=0x57b9 runnable
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f06d801b800 nid=0x57a9 runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f06d801d800 nid=0x57aa runnable
"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007f06d801f800 nid=0x57ab runnable
"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007f06d8021000 nid=0x57ac runnable
"GC task thread#4 (ParallelGC)" prio=10 tid=0x00007f06d8023000 nid=0x57ad runnable
"GC task thread#5 (ParallelGC)" prio=10 tid=0x00007f06d8024800 nid=0x57ae runnable
"GC task thread#6 (ParallelGC)" prio=10 tid=0x00007f06d8026800 nid=0x57af runnable
"GC task thread#7 (ParallelGC)" prio=10 tid=0x00007f06d8028800 nid=0x57b0 runnable
"GC task thread#8 (ParallelGC)" prio=10 tid=0x00007f06d802a000 nid=0x57b1 runnable
"GC task thread#9 (ParallelGC)" prio=10 tid=0x00007f06d802c000 nid=0x57b2 runnable
"GC task thread#10 (ParallelGC)" prio=10 tid=0x00007f06d802e000 nid=0x57b3 runnable
"GC task thread#11 (ParallelGC)" prio=10 tid=0x00007f06d802f800 nid=0x57b4 runnable
"GC task thread#12 (ParallelGC)" prio=10 tid=0x00007f06d8031800 nid=0x57b5 runnable
"GC task thread#13 (ParallelGC)" prio=10 tid=0x00007f06d8033800 nid=0x57b6 runnable
"GC task thread#14 (ParallelGC)" prio=10 tid=0x00007f06d8035000 nid=0x57b7 runnable
"GC task thread#15 (ParallelGC)" prio=10 tid=0x00007f06d8037000 nid=0x57b8 runnable
"VM Periodic Task Thread" prio=10 tid=0x00007f06d80bf800 nid=0x57c0 waiting on condition
JNI global references: 1128
public SpClient getClient() throws SocketPoolException,
SGIPException {
pTime = (new Date()).getTime();
boolean mark = false;
boolean isEmptyClient = true;
SpClient spClient = null;
// 1.把已经超时的需要删除的都添加到列表中,然后从MAP中移除掉
List<String> list = new ArrayList();
//
synchronized (hashMap) {
Iterator iter = hashMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
spClient = (SpClient) entry.getValue();
// 是否没有连接
if (spClient.isClosed() || !spClient.isConnected()) {
list.add(key);
} else {
// 检测cocket使用状态
if (spClient.getStatus() == 0) {
mark = true;
break;
}
}
}
// 移除已经关闭的socket
for (String key : list) {
hashMap.remove(key);
}
// 是否找到空闲可以用的socket
if (mark) {
spClient.lock();
return spClient;
}
// 客户端列表是否为空
isEmptyClient = hashMap.size() < Constant.getSPClient_SOCKET_MAXNO();
}
// 如果socket池中socket小于10
if (isEmptyClient) {
// 创建新的socket
spClient = addSocket();
// 获取序列号Id(yyyyMMddHHssmm)+(sn+1)
synchronized (hashMap) {
int sn = getSn();
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMddHHssmm");
String seq = dateformat.format(new Date());
seq = seq + sn;
this.hashMap.put(seq, spClient);
spClient.lock();
}
return spClient;
} else {
throw new SocketPoolException(4);
}
}