❶ java定時器運行狀態確認
問題一:定時器一般是以線程的方式運行的,如果能得到該線程的引用,就可以像查看Thread一樣查看定時器的運行狀態。如果可以修改源代碼的話最好給他提供一個方法返回線程引用
問題二:TimerTask實現了介面Runnable,如果是以new Thread(TimerTask).start()方式啟動的話就是做為一個單獨的線程運行的,如果是timeTask.run()那就是方法調用,雖然占據一個線程,但這個線程就是主線程,並沒有啟動新的線程;既然實現線程,自然可以通過Thread的isAlive方法獲取其live狀態;一般情況下(不發生異常),定時器會一直運行,如果JVM停止,那麼線程必然已經終止,如果JVM中只有這一個線程在運行,那麼JVM不停,這個定時器就是一定在運行中,如果JVM中還有其他線程在運行,那麼JVM不停,這個定時器有可能已經終止
PS:無論用不用線程池,線程啟動方式只有兩種(不包含main Thread):一種是繼承Thread類,然後直接同構引用調用start方法,第二種就是繼承Runnable介面,通過new Thread(new MyRunnableClass()).start()方式啟動。無論如何,都會有一個Thread類的引用
補充:
一個tomcat只啟動一個進程,而JVM的垃圾處理器也只有一個,所以在一個工程里運行System.gc也會影響到其他工程。
❷ java定時器與線程的區別
javax.swing.Timer
盡管所有 Timer 都使用一個共享線程(由第一個執行操作的 Timer 對象創建)執行等待,但是 Timer 的動作事件處理程序還會在其他線程(事件指派線程上)執行。這意味著 Timer 的操作處理程序可以安全地在 Swing 組件上執行操作。但是,它也意味著處理程序必須快速執行以保證 GUI 作出響應。
java.util.Timer
一種工具,線程用其安排以後在後台線程中執行的任務。可安排任務執行一次,或者定期重復執行。
簡單理解,javax.swing.Timer沒有增加線程,利用事件線程的間隙運行,java.util.Timer增加線程了。
❸ java線程中定時器
threadCount 加上鎖就行了 要麼是大於30 死循環了 要麼是小於0死循環了。大於30那邊可能性比較小,小於0那邊可能性比較大。
可以在這2個地方列印日誌驗證一下
❹ 如何使用Java線程執行定時任務及線程調動和同步
class Mytask1 extends Timertask { ①
public void run() {
System.out.println(」5 秒之後執行的定時器「);
}
}
Class Mytask2 extends Timertask {
public void run(){
System .out,println(」每秒執行的定時器」);
}
}
class Mytask3 extends Timertask {
public void run () {
System.out.println(」從某日起每分鍾執行的定時器!」) ;
}
}
public class TimerDemo {
plublic static void main(String[] args) {
Timer timer = new Timer( ) ; ②
timer.schele(new Mytask1( ) ,5000); ③
timer,schele(new Mytask1( ) ,1000,1000) ; ④
timer,schele(new Mytask1( ) ,new Dateo ( ) , 1000 * 60) ; ⑤
}
}
❺ java在web工程開發中如何實現多線程定時進行一項操作
給你寫個大概思路吧
//創建處理房間狀態的線程類,去執行改status的操作,操作在run方法里寫好
class ChangeRoomStatusProcess extends Thread {...}
//主線程創建線程池,數量自定,當前為5
ScheledExecutorService ses = Executors.newScheledThreadPool(5);
...
ses.shutdown();
//當某個線程將status設置為1以後,設置定時器,30秒後執行ChangeRoomStatusProcess的run方法
ses.schele(new ChangeRoomStatusProcess(), 30000, TimeUnit.MILLISECONDS);
❻ java如何用線程來實現定時功能
還是別用線程了吧,
運行一個月的線程。。。
建議這樣搞:
在簡歷資料庫中增加兩個欄位:簡歷刪除時間
以及簡歷是否可用,
管理員刪除簡歷時設置簡歷刪除時間為當前時間及簡歷是否可用欄位為unused
然後每隔一定時間跑個批處理程序,
將管理員已經刪除時間過一個月的簡歷自動刪除就行了,
當然,
也可以手動執行sql語句來刪除
❼ 使用java編寫定時器,如何應用線程編寫
java里的timer定時器本來就是線程的概念,何來又用線程來寫呢? 要是希望通過被的方式可以利用JDK1.5的哩線程庫,裡面有豐富的類,能讓您寫出多線程定時器程序
❽ java定時器的問題,在一個新的線程中使用
相信你的意思是 runnable 為何只執行一次而不是周期性地執行。
你看看 timerExec 方法的文檔:
public void timerExec(int milliseconds, Runnable runnable)
Causes the run() method of the runnable to be invoked by the user-interface thread after the specified number of milliseconds have elapsed.
沒說是周期性地執行 runnable。
你要周期性執行的話,最直接的方法是在你的 runnable 的 run 方法尾部調用 timerExec。比如:
import org.eclipse.swt.widgets.*;
class C {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
final int 周期 = 1000;
display.timerExec(周期, new Runnable() {
public void run() {
shell.setText("" + new java.util.Date());
display.timerExec(周期, this);
}
});
shell.open();
while ( ! shell.isDisposed())
if ( ! display.readAndDispatch())
display.sleep();
display.dispose();
}
}
❾ java 線程定時器
根據樓主的描述,可以有兩種理解:
方法1:創建一個Timer,用於在間隔時間後調用ResultSetsql()方法
在switch值發生改變的時候對Timer進行操作
值變為0時調用timer.cancel();
值為1時調用
timer = new Timer();
timer.schele(new TimerTask() {
public void run() {
ResultSetsql();
}
}, repeattime);
方法2:建立一個線程,每隔一秒進行循環,檢查monitor switch的狀態
new Thread(new Runnable() {
@Override
public void run() {
while(isRun){
if(monitor.switch == 1){
ResultSetsql();
try {
Thread.sleep(repeattime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
兩種方法有各自的適用環境,如果樓主能繼續描述就更好了
歡迎繼續提問