一条异常日志
[Error][.CinSocketHandlerThread][run][58][SYS_101][1000][433957346][5.1.1|LMY47V
release-keys|2017042817|5.2.25|SMARTISAN|YQ601][4|NETWORK_TYPE_LTE][]Socket添加任务队列异常,errorMsg:java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1991)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2025)
atjava.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
atcom.allstar.cinclient.socket.CinSocketHandlerThread.run(:49)
代码
LinkedBlockingQueue
@Override
public
voidrun()
{
CinClient.attachCurrentThreadUncatchExceptionHandler();
while(CinClient.isMainProcessRunning())
{
CinSocketTasktask
=null;
try
{
task =_queue.take();
if(task
!=null&&task.Trans!=null)
{
Trace.T(this.hashCode());
task.Trans.receiveResponse(task.Response);
}
}
catch(InterruptedExceptione)
{
LogOpr.error("Socket添加任务队列异常,errorMsg:"+Log.getStackTraceString(e),ErrorCode.SYS_TCP,"",LogOpr.getFileName(),LogOpr.getMethodName(),LogOpr.getLineNumber());
}
catch(Exceptione)
{
LogOpr.error("Socket添加任务队列异常,errorMsg:"+Log.getStackTraceString(e),ErrorCode.SYS_TCP,"",LogOpr.getFileName(),LogOpr.getMethodName(),LogOpr.getLineNumber());
}
}
System.out.println("----------Task
STOP!!------");
}
产生异常的源头
CinSocketHandlerThreadPool.java
//logon时调用
public static voidinitialize(intlength){
if(_threads!=null){
stop();
}
_threads=newCinSocketHandlerThread[length];
for(inti=0;i<
length;i++){
_threads[i] =newCinSocketHandlerThread();
_threads[i].start();
}
}
public static voidstop(){
for(Thread t :_threads){
t.interrupt();
}
}
app异常现象:每次登陆,都会泄露5个CinSocketHandlerThread线程,该线程是用来处理网络响应的
延伸:什么时候,线程会中断
1.线程在运行中,不会中断,如果其他线程调用了该线程的interrupt方法,只是对该线程的interrupt标志位置位,该线程能通过
Thread.currentThread().isInterrupted()来访问该标志。
2.如果该线程在执行一个低级可中断阻塞方法,例如 Thread.sleep()、
Thread.join() 或
Object.wait(),那么它将取消阻塞并抛出
InterruptedException。
3.并非所有的阻塞方法都抛出 InterruptedException。输入和输出流类会阻塞等待 I/O 完成,但是它们不抛出InterruptedException,而且在被中断的情况下也不会提前返回。
https://www.ibm.com/developerworks/cn/java/j-jtp05236.html