求助,关于JAVA定时器暂停的问题

问题描述

现在我有一个定时器在跑,代码如下:publicvoidrunTimer(StringspaceId,intuploadSpan,intdownloadSpan){UploadTaskuploadTask=newUploadTask();map.put("up"+spaceId,uploadTask);Timertimer=newTimer();timer.schedule(uploadTask,newDate(),uploadSpan);Timertimer2=newTimer();timer2.schedule(downloadTask,newDate(),downloadSpan);}publicvoidmain(Stringargs[]){TimerManagertimerManager=newTimerManagerImpl();timerManager.runTimer("01",1000,2000);timerManager.runTimer("02",1000,3000);timerManager.pauseTimer("01");}现在我要让定时器暂停一下,然后再接着跑,我用wait()方法和notify()方法来实现,代码如下:publicsynchronizedvoidpauseTimer(StringspaceId)throwsInterruptedException{//暂停定时器//TODOAuto-generatedmethodstubUploadTaskup=(UploadTask)map.get("up"+spaceId);if(up!=null){synchronized(up.getClass()){up.wait();}System.out.println("timer"+spaceId+"paused");}}用main函数调用,执行到up.wait();的时候出现异常java.lang.IllegalMonitorStateException:currentthreadnotowneratjava.lang.Object.wait(NativeMethod)atjava.lang.Object.wait(Object.java:429)atcom.telek.pms.impl.time.TimerManagerImpl.pauseTimer(TimerManagerImpl.java:46)atcom.telek.pms.impl.time.TimerManagerImpl.main(TimerManagerImpl.java:35)请教一下大家这是什么原因,谢谢了!

解决方案

解决方案二:
顶上去,大伙儿给看看啊……
解决方案三:
有一个方法,可以这样,先cancel掉,再重新new一下,schedule一下。
解决方案四:
你用的对象变化了,要声明一个全局的变量,每次只对它进行操作,不管是启动还是暂停。

时间: 2024-09-30 00:27:20

求助,关于JAVA定时器暂停的问题的相关文章

编程-[求助]使用java在指定的目录下实现文件的模糊搜索

问题描述 [求助]使用java在指定的目录下实现文件的模糊搜索 一.功能要求: 用户单击"选择地址"按钮,程序自动打开文件夹选择器(如图2),用户选定用户选择目标文件夹后,输入文件名(可包含"*"表示任意连续多个字符,"?"示任意一个字符),选择文件的扩展名.程序自动获取指定目录下满足条件的所有文件,并显示在窗体中(如图1).二.关键技术: 首先获取指定目录下的文件数组,再从该数组中查询满足条件的文件.三.实现的图形用户界面如下: 解决方案 已经

java定时器问题 ,实现每天指定时间执行任务

问题描述 java定时器问题 ,实现每天指定时间执行任务 我想让tomcat启动的时候执行一次,然后每天的凌晨1点执行一次 ,可是tomcat启动的时间不固定 ,不一定是1点,,,,,,,,,怎么实现呢? 解决方案 tomcat启动时最简单的就是web.xml配置一个servlet,启动时执行代码就行了. 1点钟的定时该怎么配就怎么配 解决方案二: 在tomcat启动你的servlet时,第一次启动你的定时器,并且这个时候,你的代码要捕捉当前的时间,然后利用当前的时间来计算凌晨1点的时间,然后设

线程-新人求助关于java.lang.StackOverflowError的异常问题

问题描述 新人求助关于java.lang.StackOverflowError的异常问题 public class ProcessRow { Properties source= new Properties(); { try { FileInputStream fis = new FileInputStream(new File( inputPropertieName())); InputStreamReader isr = new InputStreamReader(fis, "UTF-8&

java-菜鸟求助:Java有n个人,1到3报数,报数为3的人退出,最后留下的人原来的标号是多少

问题描述 菜鸟求助:Java有n个人,1到3报数,报数为3的人退出,最后留下的人原来的标号是多少 import java.util.Scanner;public class Yuesefu{ public static void main(String ags[]){ Scanner gain=new Scanner(System.in); System.out.println(""请输入总共的人数:""); int length=gain.nextInt();//

java定时器 run方法怎么返回值 我要返回result 代码里一直报错 晚生跪求解决

问题描述 java定时器 run方法怎么返回值 我要返回result 代码里一直报错 晚生跪求解决 public VirementResultInfo queryTransaction( final String bank, final TransactionInfo transactionInfo) { // final VirementResultInfo result = null; TimerTask task = new TimerTask() { @Override public v

java定时器使用

定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行.定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务. schedule(TimerTask task, Date time)设定指定任务task在指定时间time执行. cancel()方法结束这个定时器. schedule(TimerTask task, lo

求助:java 如何在不缩放图片大小而对图片加水印

问题描述 求助:java 如何在不缩放图片大小而对图片加水印 如题:java 如何在不缩放图片大小而对图片加水印,网上很多方法都是加完水印图片就被缩放了 解决方案 没回应啊,帮自己顶一下 解决方案二: 楼主解决问题了吗?我也想问这个

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j

求助!Java调用批处理文件后无法执行

问题描述 求助!Java调用批处理文件后无法执行 我想用Java调用批处理打开.exe安装包,但是安装包无法打开或者说直接跳过了打开 上面是我的Java代码 执行后没有打开.exe文件!但是我单独打开批处理文件就完全没问题 这是我的批处理文档! 哪位大神帮帮忙啊!!!! 解决方案 java 执行批处理文件window下java执行批处理文件 解决方案二: 既然是执行 cmd ,你的BAT里为什么还要pause? 然后,你的 command = "cmd /c zidong.bat";就