❶ 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();
两种方法有各自的适用环境,如果楼主能继续描述就更好了
欢迎继续提问