OSDN Git Service

PeriodLoader is thread safe now.
authorOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Feb 2020 06:31:31 +0000 (15:31 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Feb 2020 06:31:31 +0000 (15:31 +0900)
src/main/java/jp/sfjp/jindolf/data/html/PeriodHandler.java
src/main/java/jp/sfjp/jindolf/data/html/PeriodLoader.java

index c321126..3022eb4 100644 (file)
@@ -94,6 +94,7 @@ class PeriodHandler extends HtmlAdapter {
      */
     void setPeriod(Period period){
         this.period = period;
+        reset();
         return;
     }
 
@@ -400,14 +401,15 @@ class PeriodHandler extends HtmlAdapter {
      * @return 現時点でのカウント数
      */
     private int countUp(Avatar targetAvatar, TalkType targetType){
-        int[] countArray = this.countMap.get(targetAvatar);
-        if(countArray == null){
-            countArray = new int[TALKTYPE_NUM];
-            this.countMap.put(targetAvatar, countArray);
+        int[] avatarCount = this.countMap.get(targetAvatar);
+        if(avatarCount == null){
+            avatarCount = new int[TALKTYPE_NUM];
+            this.countMap.put(targetAvatar, avatarCount);
         }
 
         int typeIdx = targetType.ordinal();
-        int count = ++countArray[typeIdx];
+        int count = ++avatarCount[typeIdx];
+
         return count;
     }
 
index ec5dbec..c517fa1 100644 (file)
@@ -36,17 +36,6 @@ public final class PeriodLoader {
 
     private static final Logger LOGGER = Logger.getAnonymousLogger();
 
-    private static final HtmlParser PARSER;
-    private static final PeriodHandler HANDLER;
-
-    static{
-        PARSER = new HtmlParser();
-        HANDLER = new PeriodHandler();
-        PARSER.setBasicHandler   (HANDLER);
-        PARSER.setSysEventHandler(HANDLER);
-        PARSER.setTalkHandler    (HANDLER);
-    }
-
 
     /**
      * hidden constructor.
@@ -94,18 +83,21 @@ public final class PeriodLoader {
 
         period.clearTopicList();
 
-        PARSER.reset();
-        HANDLER.reset();
+        HtmlParser parser = new HtmlParser();
+        PeriodHandler handler = new PeriodHandler();
+        parser.setBasicHandler   (handler);
+        parser.setSysEventHandler(handler);
+        parser.setTalkHandler    (handler);
 
-        HANDLER.setPeriod(period);
+        handler.setPeriod(period);
         try{
-            PARSER.parseAutomatic(content);
+            parser.parseAutomatic(content);
         }catch(HtmlParseException e){
             LOGGER.log(Level.WARNING, "発言抽出に失敗", e);
         }
 
-        PARSER.reset();
-        HANDLER.reset();
+        parser.reset();
+        handler.reset();
 
         /*
             2020-02の時点で、