001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.fukurou.util; 017 018 import java.util.TimerTask; 019 import java.util.Date; 020 // import java.text.DateFormat; 021 // import java.text.SimpleDateFormat; 022 // import java.util.Locale; 023 024 import java.util.Map; 025 import java.util.HashMap; 026 import java.util.concurrent.atomic.AtomicInteger; // 5.5.2.6 (2012/05/25) findbugs対å¿? 027 028 /** 029 * HybsTimerTask.java ã¯ã€String åž‹ã‚ーã«Stringåž‹å?ã‚?Map ã™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã™ã? 030 * 031 * HTMLã®POST/GETç‰ã?å—ã‘æ¸¡ã—ã‚„ã€Stringåž‹ã?引数ãŒå¤šã„å ´åˆã«åŠ¹æžœãŒã‚りã¾ã™ã? 032 * 特ã«ã€getHybsTimerTask( String[] param ) ã«ã‚ˆã‚‹å±žæ?リスト作æ?ã¯ã€? 033 * HTMLã‚¿ã‚°ã®å±žæ?定義を行ã†ä¸Šã§?Œéžå¸¸ã«ä¾¿åˆ©ã«åˆ©ç”¨ã§ãã¾ã™ã? 034 * 035 * ã“ã?実è£??åŒæœŸåŒ–ã•れã¾ã›ã‚“ã€? 036 * 037 * @version 4.0 038 * @author Kazuhiko Hasegawa 039 * @since JDK5.0, 040 */ 041 public abstract class HybsTimerTask extends TimerTask implements Comparable<HybsTimerTask> { // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 042 // private static int counter = 0; 043 private static AtomicInteger counter = new AtomicInteger(); // 5.5.2.6 (2012/05/25) findbugs対å¿? 044 045 // private final DateFormat formatter = new SimpleDateFormat( "HHmmss",Locale.JAPAN ); 046 private final int uniqKey ; // タイマã?タスクã®ãƒ¦ãƒ‹ã?クã‚ー 047 private final long createTime = System.currentTimeMillis() ; // オブジェクトãŒç”Ÿæ?ã•ã‚ŒãŸæ™‚刻 048 private String name = null; // タイマã?タスクã®åç§° 049 private String comment = null; // タイマã?タスクã®èª¬æ˜? 050 // 3.2.2.0 (2003/05/31) HybsTimerTask ã«å¯¾ã—ã¦ã€è¨å®šå?を渡ã›ã‚‹ã‚ˆã†ã«å¤‰æ›´ã€? 051 private Map<String,String> paramMap = null; // タイマã?タスクã®ãƒ‘ラメータ 3.6.0.7 (2004/11/06) 052 private String body = null; // タイマã?タスクã®ãƒœãƒ‡ã‚£ãƒ¼è¦ç´? 053 private String startTime = "000000"; // 24時間制ã®é–‹å§‹æ™‚刻 054 private String stopTime = "000000"; // 24時間制ã®çµ‚äº?™‚刻 055 private int startStop = 0; // 24æ™‚é–“åˆ¶ã®æ—¥ä»˜ã¾ãŸãŒã‚Šã‚’ãƒã‚§ãƒ?‚¯ã€? 056 private boolean aliveFlag = true ; // æ´»ãã¦ã?‚‹ã‹ã©ã?‹ 057 private int errorSleep = 0; // TimerTask ãŒã‚¨ãƒ©ãƒ¼ã®ã¨ãã?スリープ時é–?s) 3.7.0.4 (2005/03/14) 058 059 /** 060 * ãƒ?ƒ•ォルトコンストラクター 061 * オブジェクトã?ã€newInstance ã§ã®ã¿ã€ç”Ÿæˆã•れã¾ã™ã? 062 * 063 * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã?staticフィールドã¸ã®æ›¸ãè¾¼ã¿ã«ã€AtomicInteger を利用ã—ã¾ã™ã? 064 */ 065 public HybsTimerTask() { 066 // 4.3.4.4 (2009/01/01) 067 // super(); 068 // uniqKey = counter++; 069 uniqKey = counter.getAndIncrement() ; // 5.5.2.6 (2012/05/25) findbugs対å¿? 070 } 071 072 /** 073 * ã“ã?タイマã?タスクã«ã‚ˆã£ã¦å®Ÿè¡Œã•れるアクションã§ã™ã? 074 * ã“ã“ã§ã¯ã€ã‚¨ãƒ©ãƒ¼ãƒˆãƒ©ãƒ??ã‚’å?れã¦ã?¾ã™ã?ã§ã€ã‚µãƒ–クラス㧠075 * å†å®šç¾©ã§ããªã?‚ˆã?«ã€final 化ã—ã¦ã?¾ã™ã? 076 * サブクラスã§ã¯ã€stratDaemon() をオーãƒã?ライドã—ã¦ãã ã•ã„ã€? 077 * 078 * @see java.util.TimerTask#run() 079 * @see #startDaemon() 080 */ 081 @Override 082 public final void run() { 083 try { 084 if( isExecution() ) { 085 startDaemon(); 086 } 087 } 088 catch (Throwable th) { 089 // 3.7.0.4 (2005/03/14) 090 if( errorSleep > 0 ) { 091 try { Thread.sleep( errorSleep * 1000L ); } 092 catch( InterruptedException ex ) { LogWriter.log( ex ); } 093 System.out.println( th.getMessage() ); 094 } 095 else { 096 cancel(); 097 throw new RuntimeException( th ); 098 } 099 } 100 } 101 102 /** 103 * ã“ã?タイマã?タスクã«ã‚ˆã£ã¦å®Ÿè¡Œã•れるアクションã§ã™ã? 104 * run メソãƒ?ƒ‰ã‚ˆã‚Šå‘¼ã°ã‚Œã¾ã™ã? 105 * サブクラスã§ã¯ã€startDaemon() をオーãƒã?ライドã—ã¦ãã ã•ã„ã€? 106 * 107 * @see #run() 108 */ 109 abstract protected void startDaemon() ; 110 111 /** 112 * ã“ã?タイマã?タスクã«ã‚ˆã£ã¦åˆæœŸåŒ–ã•れるアクションã§ã™ã? 113 * サブクラスã§ã¯ã€initDaemon() をオーãƒã?ライドã—ã¦ãã ã•ã„ã€? 114 * 115 */ 116 public void initDaemon() { 117 // ã“ã“ã§ã¯å‡¦ç?‚’行ã„ã¾ã›ã‚“ã€? 118 } 119 120 /** 121 * タイマã?タスクã®åç§°(ユニã?クã‚ー)ã‚’è¨å®šã—ã¾ã™ã? 122 * 123 * @param nm タイマã?タスクã®åç§° 124 */ 125 public void setName( final String nm ) { 126 name = nm; 127 } 128 129 /** 130 * タイマã?タスクã®åç§°(ユニã?クã‚ー)ã‚’å–å¾—ã—ã¾ã™ã? 131 * 132 * @return タイマã?タスクã®åç§° 133 */ 134 public String getName() { 135 return name; 136 } 137 138 /** 139 * タイマã?タスクã®èª¬æ˜Žã‚’è¨å®šã—ã¾ã™ã? 140 * 141 * @param cmt タイマã?タスクã®èª¬æ˜? 142 */ 143 public void setComment( final String cmt ) { 144 comment = cmt; 145 } 146 147 /** 148 * タイマã?タスクã®èª¬æ˜Žã‚’å–å¾—ã—ã¾ã™ã? 149 * 150 * @return タイマã?タスクã®èª¬æ˜? 151 */ 152 public String getComment() { 153 return comment; 154 } 155 156 /** 157 * ã“ã?オブジェクトã?å†?ƒ¨ãƒ¦ãƒ‹ã?クã‚ー値を返ã—ã¾ã™ã? 158 * ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆç”Ÿæˆæ¯Žã«ã€?¼‹ï¼?ã•れã¦ã€å?éƒ¨ã«æŒã£ã¦ã?¾ã™ã? 159 * 160 * @return オブジェクトã?å†?ƒ¨ãƒ¦ãƒ‹ã?クã‚ー 161 */ 162 public int getUniqKey() { 163 return uniqKey; 164 } 165 166 /** 167 * ã“ã?オブジェクトãŒç”Ÿæ?ã•ã‚ŒãŸæ™‚刻をミリ秒ã§è¿”ã—ã¾ã™ã? 168 * ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆç”Ÿæˆæ™‚ã«ã€System.currentTimeMillis() ã®å€¤ã‚’å–å¾—ã—ã¦ã?¾ã™ã? 169 * 170 * @return オブジェクトãŒç”Ÿæ?ã•ã‚ŒãŸæ™‚刻(ミリç§? 171 */ 172 public long getCreateTime() { 173 return createTime; 174 } 175 176 /** 177 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹ãƒ‘ラメータをè¨å®šã—ã¾ã™ã? 178 * 179 * 外部よりã€å¼•æ•°ã¨ã—ã¦æ¸¡ã•れã¦ãã¾ã™ã?ã“れを利用ã—ã¦ã€å„サブシスãƒ?ƒ ã¯ã€? 180 * パラメーターをè¨å®šã—ãŸã‚Šã€å?期化ã—ãŸã‚Šåˆ©ç”¨å‡ºæ¥ã¾ã™ã? 181 * 182 * @param map パラメータマッãƒ? 183 */ 184 public void setParameter( final Map<String,String> map ) { 185 if( map != null ) { 186 paramMap = new HashMap<String,String>( map ); 187 } 188 } 189 190 /** 191 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹ãƒ‘ラメータã®ã‚ーã«å¯¾ã™ã‚‹å€¤ã‚’å–å¾—ã—ã¾ã™ã? 192 * 193 * å?‚µãƒ–シスãƒ?ƒ ã¯ã€ãƒ‘ラメーターをè¨å®šã—ãŸã‚Šã€å?期化ã—ãŸã‚Šåˆ©ç”¨å‡ºæ¥ã¾ã™ã? 194 * 195 * @param key 引数ã®ã‚ー 196 * 197 * @return ã‚ーã«å¯¾ã™ã‚‹å€¤ 198 */ 199 public String getValue( final String key ) { 200 if( paramMap != null && key != null ) { 201 return paramMap.get( key ); 202 } 203 204 return null; 205 } 206 207 /** 208 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹Bodyè¦ç´??値をè¨å®šã—ã¾ã™ã? 209 * 210 * 外部よりã€å¼•æ•°ã¨ã—ã¦æ¸¡ã•れã¦ãã¾ã™ã?ã“れを利用ã—ã¦ã€å„サブシスãƒ?ƒ ã¯ã€? 211 * パラメーターをè¨å®šã—ãŸã‚Šã€å?期化ã—ãŸã‚Šåˆ©ç”¨å‡ºæ¥ã¾ã™ã? 212 * 213 * @param body Bodyè¦ç´??値 214 */ 215 public void setBody( final String body ) { 216 this.body = body ; 217 } 218 219 /** 220 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹Bodyè¦ç´??値をå–å¾—ã—ã¾ã™ã? 221 * 222 * å?‚µãƒ–シスãƒ?ƒ ã¯ã€ãƒ‘ラメーターをè¨å®šã—ãŸã‚Šã€å?期化ã—ãŸã‚Šåˆ©ç”¨å‡ºæ¥ã¾ã™ã? 223 * 224 * @return Bodyè¦ç´??値 225 */ 226 public String getBody() { 227 return body ; 228 } 229 230 /** 231 * 24時間制(YYMMDD)ã®é–‹å§‹æ™‚刻をè¨å®šã—ã¾ã™ã? 232 * 233 * æŒ?®šæ™‚刻ç¯?›²å†?§ã®å®Ÿè¡Œã?ã¿è¨±å¯ã™ã‚‹ã‚ˆã†ã«é–‹å§‹æ™‚刻をè¨å®šã—ã¾ã™ã? 234 * ã“れã¯ã€ã‚¿ã‚¤ãƒžã?ã§æŒ?®šã—ãŸé–“éš”ã”ã¨ã«ãƒã‚§ãƒ?‚¯ã‚’å?れるã®ã§ã€ãƒã‚§ãƒ?‚¯æ™‚é–“ã? 235 * é•·ã??åˆã?ã€æ£ç¢ºã«é–‹å§‹æ™‚刻ã‹ã‚‰å§‹ã¾ã‚‹ã¨ã?†ã‚‚ã?ã§ã¯ã‚りã¾ã›ã‚“ã€? 236 * åˆæœŸå€¤ã¯ã€?000000" ã§ã™ã? 237 * 238 * @param st 開始時刻 239 */ 240 public void setStartTime( final String st ) { 241 if( st == null || st.length() != 6 ) { 242 String errMsg = "startTime is inaccurate." + 243 "startTime=[" + st + "]" ; 244 throw new RuntimeException( errMsg ); 245 } 246 startTime = st ; 247 initStartStop(); 248 } 249 250 /** 251 * 24時間制(YYMMDD)ã®çµ‚äº?™‚刻をè¨å®šã—ã¾ã™ã? 252 * 253 * æŒ?®šæ™‚刻ç¯?›²å†?§ã®å®Ÿè¡Œã?ã¿è¨±å¯ã™ã‚‹ã‚ˆã†ã«çµ‚äº?™‚刻をè¨å®šã—ã¾ã™ã? 254 * ã“れã¯ã€ã‚¿ã‚¤ãƒžã?ã§æŒ?®šã—ãŸé–“éš”ã”ã¨ã«ãƒã‚§ãƒ?‚¯ã‚’å?れるã®ã§ã€ãƒã‚§ãƒ?‚¯æ™‚é–“ã? 255 * é•·ã??åˆã?ã€æ£ç¢ºã«çµ‚äº?™‚刻ã§çµ‚äº?™ã‚‹ã¨ã?†ã‚‚ã?ã§ã¯ã‚りã¾ã›ã‚“ã€? 256 * (終äº?™‚刻を越ãˆã¦ã‹ã‚‰ã®æ–°è¦å®Ÿè¡Œã?ã‚りã¾ã›ã‚“ã€? 257 * åˆæœŸå€¤ã¯ã€?000000" ã§ã™ã? 258 * 259 * @param st 終äº?™‚刻 260 */ 261 public void setStopTime( final String st ) { 262 if( st == null || st.length() != 6 ) { 263 String errMsg = "stopTime is inaccurate." + 264 "stopTime=[" + st + "]" ; 265 throw new RuntimeException( errMsg ); 266 } 267 stopTime = st ; 268 initStartStop(); 269 } 270 271 /** 272 * TimerTask ãŒã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã®ã‚¹ãƒªãƒ¼ãƒ—時é–?s) è¨å®šã—ã¾ã?åˆæœŸå€¤:0)ã€? 273 * 274 * ã“れã¯ã€äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼(ãŸã¨ãˆã?ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スãŒè½ã¡ã¦ã?Ÿãªã©)ã? 275 * 発生ã—ãŸã¨ãã§ã‚‚ã?TimerTask を終äº?•ã›ãšã«ã€Sleep ã•ã›ã¦å¾?©Ÿã•ã›ã‚‹ 276 * 事ã«ã‚ˆã‚Šã€åŽŸå›?Œé™¤åŽ»ã•れãŸå?åˆã«ã€è?動復帰ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã? 277 * ã“れã«ã€?¼?ã‚’è¨å®šã™ã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼æ™‚ã«å³ 終äº?—ã¾ã™ã? 278 * è¨å®šã?ã€ç§’ã§æŒ?®šã—ã¦ãã ã•ã„ã€? 279 * 280 * @param erTime スリープ時é–?s)(åˆæœŸå€¤:0) 281 */ 282 public void setErrorSleepSec( final int erTime ) { 283 errorSleep = erTime ; 284 } 285 286 /** 287 * 24時間制ã®é–‹å§?終äº?™‚åˆ»ã®æ—¥ä»˜ã¾ãŸãŒã‚Šã‚’åˆæœŸè¨å®šã—ã¾ã™ã? 288 * 289 * 開始時刻ã€çµ‚äº?™‚刻ã¯ã€?¼’4時間制ã§ã—ã‹æŒ?®šã§ãã¾ã›ã‚“ã€?日付指定ã§ããªã? 290 * ãã?ãŸã‚ã€æœ?—:ï¼ï¼ã‹ã‚‰å¤œï¼’2:ï¼ï¼ãªã©ã® 開始<終äº?ã®æ™‚ã?å˜ç´”ãªç¯?›²ãƒã‚§ãƒ?‚¯ã§ 291 * 判æ–ã§ãã¾ã™ãŒã€å¤œï¼’2:ï¼ï¼ã‹ã‚‰æœ?—:ï¼ï¼ã«å®Ÿè¡Œã—ãŸã„å ´åˆã?ã€ç•°ãªã‚‹ãƒã‚§ãƒ?‚¯ã? 292 * å¿?¦ã«ãªã‚Šã¾ã™ã? 293 * ã¾ãŸã?開始時刻ã¨çµ‚äº?™‚åˆ»ãŒæœªè¨å®šã?å ´åˆã‚„ã€åŒã˜æ™‚刻ã®å ´åˆã?ã€å¸¸ã«å®Ÿè¡Œã™ã‚‹å¿?¦ãŒ 294 * ã‚りã¾ã™ã?ã“れらã?ãƒã‚§ãƒ?‚¯ã‚’毎回行ã†ã®ã§ã¯ãªãã?é–‹å§?終äº?™‚刻è¨å®šæ™‚ã«ãƒã‚§ãƒ?‚¯ã—㦠295 * ãŠãã¾ã™ã? 296 * 297 */ 298 private void initStartStop() { 299 if( startTime == null || stopTime == null ) { 300 startStop = 0; 301 } 302 else { 303 startStop = startTime.compareTo( stopTime ); 304 } 305 } 306 307 /** 308 * 実行å¯èƒ½æ™‚é–“å†?‹ã©ã?‹ã‚’判定ã—ã¾ã™ã? 309 * 310 * è¨å®šã•れãŸé–‹å§‹æ™‚刻ã¨çµ‚äº?™‚刻ã«åŸºã¥ã?¦ã€ç¾æ™‚刻ã§å®Ÿè¡Œå¯èƒ½ã‹ã©ã?‹ 311 * 判æ–ã—ã¾ã™ã? 312 * 313 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ£ã—ã¾ã™ã? 314 * 315 * @return (true:å®Ÿè¡Œè¨±å¯ false:åœæ¢) 316 */ 317 private boolean isExecution() { 318 boolean rtnFlag = false; 319 // String time = formatter.format( new Date() ); 320 String time = HybsDateUtil.getDate( "HHmmss" ); // 5.5.7.2 (2012/10/09) HybsDateUtil を利用 321 322 if( startStop == 0 ) { 323 rtnFlag = true; 324 } 325 else if( startStop < 0 ) { 326 if( startTime.compareTo( time ) < 0 && 327 time.compareTo( stopTime ) < 0 ) { 328 rtnFlag = true; 329 } 330 } 331 else if( startStop > 0 ) { 332 if( startTime.compareTo( time ) < 0 || 333 time.compareTo( stopTime ) < 0 ) { 334 rtnFlag = true; 335 } 336 } 337 return rtnFlag; 338 } 339 340 /** 341 * ã“ã?ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¨æŒ?®šã•れãŸã‚ªãƒ–ジェクトã?é ?ºã‚’比è¼?—ã¾ã™ã? 342 * ã“ã?ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒ?®šã•れãŸã‚ªãƒ–ジェクトよりå°ã•ã??åˆã?è²??æ•´æ•°ã€? 343 * ç‰ã—ã??åˆã?ゼãƒã€å¤§ãã„å ´åˆã?æ£ã®æ•´æ•°ã‚’è¿”ã—ã¾ã™ã? 344 * 345 * @param other 比è¼?¯¾è±¡ã® Object 346 * 347 * @return ã“ã?ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒ?®šã•れãŸã‚ªãƒ–ジェクトよりå°ã•ã??åˆã?è²??æ•´æ•°ã€ç‰ã—ã??åˆã?ゼãƒã€å¤§ãã„å ´åˆã?æ£ã®æ•´æ•° 348 * @throws ClassCastException æŒ?®šã•れãŸã‚ªãƒ–ジェクトã?åž‹ãŒåŽŸå› ã§ã€ã“ã® Object ã¨æ¯”è¼?§ããªã??å? 349 */ 350 // public int compareTo( final Object obj ) { 351 // HybsTimerTask other = (HybsTimerTask)obj ; 352 public int compareTo( final HybsTimerTask other ) { // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 353 354 if( name == null && other.name != null ) { return -1; } 355 if( name != null && other.name == null ) { return 1; } 356 357 if( name != null && other.name != null ) { 358 int nmComp = name.compareTo( other.name ); 359 if( nmComp != 0 ) { return nmComp; } 360 } 361 362 return ( uniqKey - other.uniqKey ); 363 } 364 365 /** 366 * ã“ã?オブジェクトã?æ–?—å?表ç¾ã‚’è¿”ã—ã¾ã™ã? 367 * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã? 368 * 369 * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?—å?è¡¨ç¾ 370 */ 371 @Override 372 public String toString() { 373 return name + " [" + uniqKey + "]"; 374 } 375 376 /** 377 * ã“ã?オブジェクトã¨ä»–ã?オブジェクトãŒç‰ã—ã?‹ã©ã?‹ã‚’示ã—ã¾ã™ã? 378 * 379 * @param object 比è¼?¯¾è±¡ã®å‚ç?オブジェクãƒ? 380 * 381 * @return å¼•æ•°ã«æŒ?®šã•れãŸã‚ªãƒ–ジェクトã¨ã“ã?オブジェクトãŒç‰ã—ã??åˆã? trueã€ãã?§ãªã??åˆã? false 382 */ 383 @Override 384 public boolean equals( final Object object ) { 385 if( object == null || !getClass().equals( object.getClass() ) ) { return false; } 386 if( !super.equals( object ) ) { return false; } 387 388 HybsTimerTask other = (HybsTimerTask)object; 389 return uniqKey == other.uniqKey ; 390 } 391 392 /** 393 * オブジェクトãŒç”Ÿå˜ã—ã¦ã?‚‹ã‹ã©ã?‹ã‚’判定ã—ã¾ã™ã? 394 * 395 * @return 生å˜ã—ã¦ã?‚‹ã‹ã©ã?‹ã€‚true:生å?/ false:ã‚ャンセル済㿠396 */ 397 public boolean isAlive() { 398 return aliveFlag ; 399 } 400 401 /** 402 * オブジェクトã?ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰å?ã‚’è¿”ã—ã¾ã™ã? 403 * 404 * @return ã“ã?オブジェクトã?ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰å? 405 */ 406 @Override 407 public int hashCode() { 408 return uniqKey ; 409 } 410 411 /** 412 * ã“ã?タイマã?タスクã®cancel() メソãƒ?ƒ‰ã‚’オーãƒã?ライドã—ã¾ã™ã? 413 * <del>HybsTimerTaskManager#cancelTask( int ) を実行ã—ã¾ã™ã?</del> 414 * 415 * @return ã‚ãƒ£ãƒ³ã‚»ãƒ«ãŒæ£å¸¸ã«çµ‚äº?§ããŸã‹ã©ã?‹ 416 * @see java.util.TimerTask#cancel() 417 */ 418 @Override 419 public boolean cancel() { 420 if( aliveFlag ) { 421 System.out.println(); 422 System.out.println( toString() + " " + new Date() + " Stoped" ); 423 aliveFlag = false; // cancelTask を呼ã¶å‰ã«å¿?šã€Žfalseã€ã«ã—ã¦ãŠãã€? 424 } 425 return super.cancel(); 426 } 427 }