進(jìn)程運(yùn)行時(shí)間跟你的代碼計(jì)算有關(guān):計(jì)算復(fù)雜就多占用點(diǎn)時(shí)間;如果想在特定時(shí)間運(yùn)行特定代碼就開(kāi)啟定時(shí)器;控制進(jìn)程運(yùn)行時(shí)間,也可直接阻塞主線程main(不建議);如果你的程序沒(méi)有交互功能,代碼運(yùn)行完后,main進(jìn)程還在只要不停止運(yùn)行;如果有交互功能,你輸入你的命令觸發(fā)某些功能。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)蘭陵免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
wait()方法是java.lang.Object類(lèi)韋線程提供的用于實(shí)現(xiàn)線程間通信的同步控制方法。wait()方法使當(dāng)前線程主動(dòng)釋放互斥鎖,并進(jìn)入該互斥鎖的等待隊(duì)列。(也就是說(shuō),它使當(dāng)前線程暫停執(zhí)行,等待其他線程執(zhí)行notify()方法或者notifyall()方法后再繼續(xù)執(zhí)行本線程。)本方法用于釋放一個(gè)項(xiàng)目的線程,喚醒另一個(gè)可能在等待的線程。有兩種調(diào)用格式:
1.wait()等待通信線程喚醒后再繼續(xù)執(zhí)行本線程。
2.wait(long millis)等待通信線程喚醒或者最多等待millis毫秒后,再繼續(xù)執(zhí)行本線程。
我知道的就這么多了哈,希望對(duì)你能有一點(diǎn)幫助哦~~
package?thread.timer;
import?java.util.Calendar;
import?java.util.Timer;
import?java.util.TimerTask;
public?class?TimerTest?{
public?static?void?main(String[]?args)?{
Timer?t?=?new?Timer();
TimerTask?task?=?new?TimerTask()?{
@Override
public?void?run()?{
System.out.println("Task?is?processing.");//?此處可以插入自己想運(yùn)行的代碼片段
}
};
Calendar?c?=?Calendar.getInstance();
c.set(Calendar.MINUTE,?26);//?時(shí)間可以自己設(shè)置
t.schedule(task,?c.getTime());
}
}
import java.util.Calendar; \x0d\x0aimport java.util.Date; \x0d\x0aimport java.util.Timer; \x0d\x0aimport java.util.TimerTask; \x0d\x0a \x0d\x0apublic class Test { \x0d\x0a public static void main(String[] args) { \x0d\x0a //timer1(); \x0d\x0a timer2(); \x0d\x0a //timer3(); \x0d\x0a //timer4(); \x0d\x0a } \x0d\x0a \x0d\x0a // 第一種方法:設(shè)定指定任務(wù)task在指定時(shí)間time執(zhí)行 schedule(TimerTask task, Date time) \x0d\x0a public static void timer1() { \x0d\x0a Timer timer = new Timer(); \x0d\x0a timer.schedule(new TimerTask() { \x0d\x0a public void run() { \x0d\x0a System.out.println("-------設(shè)定要指定任務(wù)--------"); \x0d\x0a } \x0d\x0a }, 2000);// 設(shè)定指定的時(shí)間time,此處為2000毫秒 \x0d\x0a } \x0d\x0a \x0d\x0a // 第二種方法:設(shè)定指定任務(wù)task在指定延遲delay后進(jìn)行固定延遲peroid的執(zhí)行 \x0d\x0a // schedule(TimerTask task, long delay, long period) \x0d\x0a public static void timer2() { \x0d\x0a Timer timer = new Timer(); \x0d\x0a timer.schedule(new TimerTask() { \x0d\x0a public void run() { \x0d\x0a System.out.println("-------設(shè)定要指定任務(wù)--------"); \x0d\x0a } \x0d\x0a }, 1000, 1000); \x0d\x0a } \x0d\x0a \x0d\x0a // 第三種方法:設(shè)定指定任務(wù)task在指定延遲delay后進(jìn)行固定頻率peroid的執(zhí)行。 \x0d\x0a // scheduleAtFixedRate(TimerTask task, long delay, long period) \x0d\x0a public static void timer3() { \x0d\x0a Timer timer = new Timer(); \x0d\x0a timer.scheduleAtFixedRate(new TimerTask() { \x0d\x0a public void run() { \x0d\x0a System.out.println("-------設(shè)定要指定任務(wù)--------"); \x0d\x0a } \x0d\x0a }, 1000, 2000); \x0d\x0a } \x0d\x0a \x0d\x0a // 第四種方法:安排指定的任務(wù)task在指定的時(shí)間firstTime開(kāi)始進(jìn)行重復(fù)的固定速率period執(zhí)行. \x0d\x0a // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period) \x0d\x0a public static void timer4() { \x0d\x0a Calendar calendar = Calendar.getInstance(); \x0d\x0a calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時(shí) \x0d\x0a calendar.set(Calendar.MINUTE, 0); // 控制分 \x0d\x0a calendar.set(Calendar.SECOND, 0); // 控制秒 \x0d\x0a \x0d\x0a Date time = calendar.getTime(); // 得出執(zhí)行任務(wù)的時(shí)間,此處為今天的12:00:00 \x0d\x0a \x0d\x0a Timer timer = new Timer(); \x0d\x0a timer.scheduleAtFixedRate(new TimerTask() { \x0d\x0a public void run() { \x0d\x0a System.out.println("-------設(shè)定要指定任務(wù)--------"); \x0d\x0a } \x0d\x0a }, time, 1000 * 60 * 60 * 24);// 這里設(shè)定將延時(shí)每天固定執(zhí)行 \x0d\x0a } \x0d\x0a}
第一種是以毫秒為單位計(jì)算的。
[java]?view plain?copy
//偽代碼
long?startTime=System.currentTimeMillis();???//獲取開(kāi)始時(shí)間
doSomeThing();??//測(cè)試的代碼段
long?endTime=System.currentTimeMillis();?//獲取結(jié)束時(shí)間
System.out.println("程序運(yùn)行時(shí)間:?"+(end-start)+"ms");
第二種是以納秒為單位計(jì)算的。?
[java]?view plain?copy
//偽代碼
long?startTime=System.nanoTime();???//獲取開(kāi)始時(shí)間
doSomeThing();??//測(cè)試的代碼段
long?endTime=System.nanoTime();?//獲取結(jié)束時(shí)間
System.out.println("程序運(yùn)行時(shí)間:?"+(end-start)+"ns");
包含所需的包: ?import java.lang.System;
用Timer可以實(shí)現(xiàn)~~
Timer的schedule方法可以指定第一次運(yùn)行的時(shí)刻,和重復(fù)間隔
具體可以參考API
timer.schedule(task, firstTime, period)
指定firstTime為21:00:00,period為一天的毫秒數(shù)24*3600*1000就成了。。
或者可以自己寫(xiě)個(gè)線程,放個(gè)while循環(huán),每分鐘檢查一次,如果到時(shí)間了就執(zhí)行任務(wù),如果沒(méi)到就sleep一分鐘。。當(dāng)然,這種方法比較土。。
更復(fù)雜點(diǎn)的可以借助現(xiàn)有的包,比如quartz,有興趣可以研究下~~