This is an automated email from the ASF dual-hosted git repository.

carryxyh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new fda71e7  must shutdown thread pool when no in use (#3255)
fda71e7 is described below

commit fda71e764be730508a421f884456414b451f78ee
Author: 苏承祥 <[email protected]>
AuthorDate: Fri Jan 18 10:25:35 2019 +0800

    must shutdown thread pool when no in use (#3255)
    
    * must shutdown thread pool when no in use
---
 .../threadpool/support/AbortPolicyWithReport.java  | 63 ++++++++++------------
 1 file changed, 27 insertions(+), 36 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
index 0f4f72a..8a13761 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
@@ -24,13 +24,13 @@ import org.apache.dubbo.common.utils.JVMUtil;
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.ExecutorService;
 
 /**
  * Abort Policy.
@@ -78,43 +78,34 @@ public class AbortPolicyWithReport extends 
ThreadPoolExecutor.AbortPolicy {
             return;
         }
 
-        Executors.newSingleThreadExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                String dumpPath = url.getParameter(Constants.DUMP_DIRECTORY, 
System.getProperty("user.home"));
-
-                SimpleDateFormat sdf;
-
-                String os = System.getProperty("os.name").toLowerCase();
-
-                // window system don't support ":" in file name
-                if(os.contains("win")){
-                    sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
-                }else {
-                    sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
-                }
-
-                String dateStr = sdf.format(new Date());
-                FileOutputStream jstackStream = null;
-                try {
-                    jstackStream = new FileOutputStream(new File(dumpPath, 
"Dubbo_JStack.log" + "." + dateStr));
-                    JVMUtil.jstack(jstackStream);
-                } catch (Throwable t) {
-                    logger.error("dump jstack error", t);
-                } finally {
-                    guard.release();
-                    if (jstackStream != null) {
-                        try {
-                            jstackStream.flush();
-                            jstackStream.close();
-                        } catch (IOException e) {
-                        }
-                    }
-                }
-
-                lastPrintTime = System.currentTimeMillis();
+        ExecutorService pool = Executors.newSingleThreadExecutor();
+        pool.execute(() -> {
+            String dumpPath = url.getParameter(Constants.DUMP_DIRECTORY, 
System.getProperty("user.home"));
+
+            SimpleDateFormat sdf;
+
+            String os = System.getProperty("os.name").toLowerCase();
+
+            // window system don't support ":" in file name
+            if (os.contains("win")) {
+                sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
+            } else {
+                sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
+            }
+
+            String dateStr = sdf.format(new Date());
+            //try-with-resources
+            try (FileOutputStream jStackStream = new FileOutputStream(new 
File(dumpPath, "Dubbo_JStack.log" + "." + dateStr))) {
+                JVMUtil.jstack(jStackStream);
+            } catch (Throwable t) {
+                logger.error("dump jStack error", t);
+            } finally {
+                guard.release();
             }
+            lastPrintTime = System.currentTimeMillis();
         });
+        //must shutdown thread pool ,if not will lead to OOM
+        pool.shutdown();
 
     }
 

Reply via email to