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 *
414 * @return ã‚ãƒ£ãƒ³ã‚»ãƒ«ãŒæ£å¸¸ã«çµ‚äº?§ããŸã‹ã©ã?‹
415 * @see java.util.TimerTask#cancel()
416 */
417 @Override
418 public boolean cancel() {
419 if( aliveFlag ) {
420 System.out.println();
421 System.out.println( toString() + " " + new Date() + " Stoped" );
422 aliveFlag = false; // cancelTask を呼ã¶å‰ã«å¿?šã€Žfalseã€ã«ã—ã¦ãŠãã€?
423 }
424 return super.cancel();
425 }
426 }