//這個(gè)是以整秒為單位,如果要精確到毫秒級(jí)別,可以自行優(yōu)化
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、射陽ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的射陽網(wǎng)站制作公司
public?static?void?main(String[]?args)?{
try?{
double?speek?=?1000;//初始速度
int?sec?=?0;//大概時(shí)間數(shù),秒
double?distance?=?5000.0;//實(shí)際距離
while?(true){
distance?=?distance?-?speek;
speek?=?speek?-?(speek?*?10?/?100);
sec?++;
System.out.println("第"+sec+"秒后,剩余距離="+distance);
if(distance?=?0){
break;
}
}
System.out.println("最終大約需要"+sec+"秒");
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
可以使用Timer和TimerTask類在java中實(shí)現(xiàn)定時(shí)任務(wù),詳細(xì)說明如下:
1、基礎(chǔ)知識(shí)
java.util.Timer
一種線程設(shè)施,用于安排以后在后臺(tái)線程中執(zhí)行的任務(wù)??砂才湃蝿?wù)執(zhí)行一次,或者定期重復(fù)執(zhí)行。此類是線程安全的:多個(gè)線程可以共享單個(gè) Timer 對(duì)象而無需進(jìn)行外部同步。
java.util.TimerTask
由 Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。
2、示例代碼
該示例實(shí)現(xiàn)這樣一個(gè)功能,在系統(tǒng)運(yùn)行期間,每30分鐘,系統(tǒng)自動(dòng)檢查連接池中的可用連接數(shù),并輸出到日志中。
首先創(chuàng)建一個(gè)需要定時(shí)執(zhí)行的任務(wù)類,這個(gè)任務(wù)類需要繼承TimerTask,然后重寫run()方法,run()方法體中的代碼就是定時(shí)需要執(zhí)行的操作,在本demo中,就是獲取連接池中當(dāng)前可用連接數(shù),并輸出到日志中,具體實(shí)現(xiàn)代碼如下:
public class TaskAvailableConnectNumber extends TimerTask {
private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class);
private ConnectionPool pool=ConnectionPool.getInstance();
@Override
publicvoid run() {
log.debug("當(dāng)前連接池中可用連接數(shù)"+pool.getAvailableConnectNumber());
}
}
下面定義一個(gè)監(jiān)聽器,負(fù)責(zé)在應(yīng)用服務(wù)器啟動(dòng)時(shí)打開定時(shí)器,監(jiān)聽器需要實(shí)現(xiàn)ServletContextListener接口,并重寫其中的contextInitialized()和contextDestroyed()方法,代碼如下:
public class OnLineListener implements ServletContextListener{
private Logger log = Logger.getLogger(OnLineListener.class);
Timer timer = null;
//在應(yīng)用服務(wù)器啟動(dòng)時(shí),會(huì)執(zhí)行該方法
publicvoid contextInitialized(ServletContextEvent arg0) {
//創(chuàng)建一個(gè)定時(shí)器,用于安排需要定時(shí)執(zhí)行的任務(wù)。
timer = new Timer();
//為定時(shí)器安排需要定時(shí)執(zhí)行的任務(wù),該任務(wù)就是前面創(chuàng)建的任務(wù)類TaskAvailableConnectNumber,并指定該任務(wù)每30分鐘執(zhí)行一次。
timer.schedule(new TaskAvailableConnectNumber(), 0, 30*60*1000);
log.debug("啟動(dòng)定時(shí)器");
}
//應(yīng)用服務(wù)器關(guān)閉時(shí),會(huì)執(zhí)行該方法,完成關(guān)閉定時(shí)器的操作。
public void contextDestroyed(ServletContextEvent arg0) {
if(timer!=null){
timer.cancel();//關(guān)閉定時(shí)器
log.debug("-----定時(shí)器銷毀--------");
}
}
}
監(jiān)聽器要想正常運(yùn)行,需要在web.xml文件中進(jìn)行配置,配置信息如下:
!-- 監(jiān)聽器配置開始 --
listener
listener-class
cn.sdfi.listen.OnLineListener
/listener-class
/listener
!-- 監(jiān)聽器配置結(jié)束 --
以上步驟完成后,一個(gè)簡單的定時(shí)器就算開發(fā)完成了。
控制臺(tái)小游戲 class YZDEL
{
public static void main(String[] args)
{
java.util.Random Shiji = new java.util.Random();
java.util.Scanner Shuru = new java.util.Scanner(System.in);
java.util.Scanner Nandu = new java.util.Scanner(System.in);
int YingxHP = 20;
int YingxMP = 0;
int MogHP = 20;
int MogMP = 0;
int MogDo = 0;
int fangyu = 0;
System.out.println("┏━━━━╮┏━━┣┣┓ ╮ ┓┏━┳━┳┓┓━┓ ");
System.out.println("┏┣━━━┓┏━━┣┣┓ ┃┏ ┃ ┃┓┃ ╯ ");
System.out.println("┣┣━━━┫╭━━┻╯╮ ┃╰┓┃ ┃╯┏━┣━━┓");
System.out.println("┣┣━━━┫┏━━━━┓╭━━┣━┛┗━┻━┻┛┃┃");
System.out.println("┏┣━━━┓┣━━━━┫ ┃┃┃┗╮╮┃┃┣━╯");
System.out.println(" ┛┗╯┗━━━━╯┗╯╰╰━━┛┛┗━╯╰━┛");
System.out.println();
System.out.println(" 作者:天狐空幻");
System.out.println();
System.out.println("說明:勇者的操作方式為以下所示:");
System.out.println(" 使用攻擊需消耗1MP 傷害1HP");
System.out.println(" 使用蓄力可增加1MP 傷害0HP");
System.out.println(" 使用躲閃需消耗0MP 傷害0HP 躲避攻擊");
System.out.println(" 使用重?fù)粜柘?MP 傷害2HP 防御無效");
System.out.println(" 惡龍攻擊力高, 注意防御是取勝的關(guān)鍵");
System.out.println(" 惡龍MP達(dá)到4時(shí)可能會(huì)放出火焰無法躲避");
System.out.println(" 準(zhǔn)備說明完畢,那么讓我們來挑戰(zhàn)惡龍吧!");
System.out.println("==================================");
//難度選擇
System.out.println("請(qǐng)選擇難度");
System.out.println("1.娛樂 2.挑戰(zhàn) 3.噩夢");
int ND = Nandu.nextInt();
System.out.println("==================================");
while(true)
{
//HP,MP的顯示
System.out.print("勇者: ");
System.out.print(" HP ");
for(int x=YingxHP;x0;x--) System.out.print("*");
System.out.print(" "+YingxHP);
System.out.println();
System.out.print(" ");
System.out.print(" MP ");
for(int x=YingxMP;x0;x--) System.out.print("*");
System.out.print(" "+YingxMP);
System.out.println();
System.out.print("惡龍: ");
System.out.print(" HP ");
for(int y=MogHP;y0;y--) System.out.print("*");
System.out.print(" "+MogHP);
System.out.println();
System.out.print(" ");
System.out.print(" MP ");
for(int y=MogMP;y0;y--) System.out.print("*");
System.out.print(" "+MogMP);
System.out.println();
System.out.println("==================================");
//勝利判定
if(YingxHP1) {System.out.println();System.out.println("勇者HP為0! 不..不可能..我怎么會(huì)..勇者倒下了。再接再厲吧!~");System.out.println();break;}
if(MogHP1) {System.out.println();System.out.println("惡龍HP為0! 惡龍絕望的哀鳴中倒了下去。勇者勝利了。恭喜你挑戰(zhàn)成功?。?);System.out.println();break;}
//角色輸入判定
System.out.println("你要做什么:");
System.out.println("1.攻擊 2.蓄力");
System.out.println("3.躲閃 4.重?fù)?);
System.out.println("____________________");
int Do = Shuru.nextInt();
//敵人輸入判定
//娛樂難度
if(ND==1){
for(int i=1;i3;i++) MogDo = Shiji.nextInt(4);}
//挑戰(zhàn)難度
if(ND==2){
if(YingxMP==0MogMP==0) {MogDo = 0;}
else if(MogMP==0){for(int i=1;i3;i++) MogDo = Shiji.nextInt(2);}
else if(YingxMP2MogMP2) MogDo = 2;
else if(MogMP4) {for(int i=1;i4;i++) MogDo = Shiji.nextInt(3);}
else MogDo = 3;}
//噩夢難度
if(ND==3){
if(Do==1) MogDo=1;
if(Do==2MogMP0) MogDo=2;
if(Do==2MogMP==0) MogDo=0;
if(Do==3MogMP4) MogDo=0;
if(Do==3MogMP=4) MogDo=3;}//變態(tài)判定。。
//戰(zhàn)斗分析
//防御
if(Do==3) {fangyu=1;System.out.println("你靈巧的躲避攻擊!");}
if(MogDo==1) {fangyu=1;System.out.println("惡龍進(jìn)行防御!");}
//角色判定
if(Do==1YingxMP==0) {System.out.println("MP不足!");}
if(Do==1YingxMP0) {
if(fangyu==0) {MogHP=MogHP-1;YingxMP=YingxMP-1;System.out.println("你發(fā)動(dòng)攻擊!");}
if(fangyu==1) {YingxMP=YingxMP-1;System.out.println("你的攻擊被格擋!");}}
if(Do==2) {YingxMP=YingxMP+1;System.out.println("你進(jìn)行蓄力!");}
if(Do==4YingxMP3) {System.out.println("MP不足!");}
if(Do==4YingxMP2) {MogHP=MogHP-2;YingxMP=YingxMP-3;System.out.println("你發(fā)動(dòng)重?fù)簦?);}
if(Do 4) System.out.println("你不知所措...");
//敵人判定
if(MogDo==2MogMP==0) {System.out.println("惡龍?jiān)诎l(fā)呆!");}
if(MogDo==2MogMP0) {
if(fangyu==0) {YingxHP=YingxHP-2;MogMP=MogMP-1;System.out.println("惡龍發(fā)動(dòng)攻擊!");}
if(fangyu==1) {MogMP=MogMP-1;System.out.println("惡龍的攻擊被躲開了!");}}
if(MogDo==0) {MogMP=MogMP+1;System.out.println("惡龍進(jìn)行蓄力!");}
if(MogDo==3MogMP4) {System.out.println("惡龍?jiān)诎l(fā)呆!");}
if(MogDo==3MogMP3) {YingxHP=YingxHP-4;MogMP=MogMP-4;System.out.println("惡龍發(fā)動(dòng)火焰吐吸!躲避不能!");}
//結(jié)束
fangyu = 0;
MogDo = 0;
System.out.println("____________________");
System.out.println();
System.out.println("=================================="); }
}
}