javaの後だけfinnally、ないキャッチしてみてください

労働者に今日JDK1.6ソースrunTask法ThreadPoolExecutorを見て   

tthrowの元での漁獲量(のRuntimeException EX)、exは、上の例外をキャッチしないようにしようと、上部thrown'll、例外は、上位層にスローされます

finnallyで直接試した後、finnally runLock.unlock()で、ロックを解除します。

概要:試して.... finnallyの使用主にリソースを解放するために、キャッチ例外なく、例外処理は、上位の発信者を呼び、

 

        プライベート ボイドrunTask(Runnableをタスク){
             最終 ReentrantLockのrunLock = この.runLock。
            runLock.lock();
            してみてください{
                 / *
                 *スレッドを確実に停止しているプールが中断された場合。
                 *ない場合は、スレッドが中断されていないことを確認。これが必要です
                 *ケースでの状態の二重チェックが割り込みました
                 そうならば、 -  * shutdownNowのと同時にクリア
                 *割り込みが再び有効になります。
                 * / 
                もし((runState> = STOP || 
                    (Thread.interrupted() && runState> = STOP))&&
                    hasRun)
                    thread.interrupt();
                / *
                 *トラックの実行状態を確実にするafterExecute
                 *タスクが完了したかを投げた場合にのみ呼び出されます
                 *例外。それ以外の場合は、キャッチ実行時例外
                 *で、afterExecute自体によってスローされています
                 *その場合、我々は再びそれを呼び出す必要はありません。
                 * / 
                ブール RAN = ;
                beforeExecute(スレッド、タスク)。
                してみてください{
                    task.run();
                    RAN = ;
                    afterExecute(タスク、ヌル);
                    ++ completedTasks;
                } キャッチ(のRuntimeException EX){
                     場合(!RAN)
                        afterExecute(タスク、EX);
                    スローEXを。
                }
            } 最後に{
                runLock.unlock();
            }
        }

おすすめ

転載: www.cnblogs.com/fengyanqing/p/12168155.html