Android怎么正确使用wait和notify方法
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait() , 放弃对象锁.
之后在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A:
synchronized(obj) {
condition = true;
obj.notify();
}
需要注意的概念是:
# 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) {…} 代码段内。
# 调用obj.wait()后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj) {…} 代码段内唤醒A。
# 当obj.wait()方法返回后,线程A需要再次获得obj锁,才能继续执行。
# 如果A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,A2,A3中的一个(具体哪一个由JVM决定)。
# obj.notifyAll()则能全部唤醒A1,A2,A3,但是要继续执行obj.wait()的下一条语句,必须获得obj锁,因此,A1,A2,A3只有一个有机会获得锁继续执行,例如A1,其余的需要等待A1释放obj锁之后才能继续执行。
# 当B调用obj.notify/notifyAll的时候,B正持有obj锁,因此,A1,A2,A3虽被唤醒,但是仍无法获得obj锁。
直到B退出synchronized块,释放obj锁后,A1,A2,A3中的一个才有机会获得锁继续执行Timer的schedule和scheduleAtFixedRate方法的区别解析
在java中,Timer类主要用于定时性、周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)schedule方法:“fixed-delay”;如果第一次执行时间被delay了,随后的执行时间按 照 上一次 实际执行完成的时间点 进行计算 (2)scheduleAtFixedRate方法:“fixed-rate”;如果第一次执行时间被delay了,随后的执行时间按照 上一次开始的 时间点 进行计算,并且为了”catch up”会多次执行任务,TimerTask中的执行体需要考虑同步newsinglethreadscheduledexecutor是单例的吗
ScheduledExecutorService scheduled=Executors.newSingleThreadScheduledExecutor(); scheduled.scheduleAtFixedRate(new Runnable() { @Override public void run() { Syste。
在java中timertask是什么类
TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。
Timer类是一种线程设施,可以用来实现某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。
该功能和TimerTask配合使用。
TimerTask类用于实现由Timer安排的一次或重复执行的某个任务。
每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续的任务执行。
void cancel()
// 终止此计时器,丢弃所有当前已安排的任务。
int purge()
//从此计时器的任务队列中移除所有已取消的任务。
void schedule(TimerTask task, Date time)
//安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
//安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
//安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
//安排指定的任务在指定的时间开始进行重复的固定速率执行。
void scheduleAtFixedRate(TimerTask task, long delay, long period)
//安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
+++++++++++++++++++++++++++++++++++++++++++++++++++
boolean cancel()
//取消此计时器任务。
abstract void run()
//此计时器任务要执行的操作。
long scheduledExecutionTime()
//返回此任务最近实际 执行的已安排 执行时间。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
package zzs.time.demo;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
SimpleDateFormat simpleDateFormat=null;
simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date()));
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
package zzs.time.demo;
import java.util.Timer;
public class TestTask {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Timer timer=new Timer();
MyTask myTask=new MyTask();
timer.schedule(myTask, 1000, 2000);
// Thread.sleep(5000);
//timer.cancel();
}
}
运行结果:
当前的系统时间为:2011-07-10 15:37:44:831
当前的系统时间为:2011-07-10 15:37:46:786
当前的系统时间为:2011-07-10 15:37:48:786
当前的系统时间为:2011-07-10 15:37:50:786
当前的系统时间为:2011-07-10 15:37:52:786
当前的系统时间为:2011-07-10 15:37:54:786schedule 和 scheduleAtFixedRate 的区别
首先,java的问题问到这里,不妥。
然后,问到这里,还不讲清楚是java,更加不妥。
。
没有人说你说的不清楚啊,还是说你在别的地方提了相同的问题,人家说你讲的不清楚?其实,我也不明白你说的“启动服务器任务重复连续执行两次”是指什么?以下引用java api的原话“在固定速率执行中,根据已安排的初始执行时间来安排每次执行。
如果由于任何原因(如垃圾回收或其他背景活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。
”不知道你有没有看过,我觉得应该和你的问题有关。
如果你要一天执行一次的话,我觉得该用scheduleAtFixedRate,因为我曾经写过一个秒表的测试程序,当时一开始用的是schedule,然后发现很不准。
我让他每隔10毫秒,更新gui界面,但到后来,...当时一开始用的是schedule?以下引用java api的原话“在固定速率执行中。
然后?其实。
也就是我虽然告诉他10毫秒做一次,因为我曾经写过一个秒表的测试程序,根据已安排的初始执行时间来安排每次执行。
我让他每隔10毫秒,问到这里首先,更加不妥,我觉得该用scheduleAtFixedRate。
如果你要一天执行一次的话,那么运行时间长了以后。
上面的例子也就基本说明了两个方法的区别了,从而使后续执行能够“追赶上来”。
,但有可能是11毫秒才做,然后发现很不准。
”不知道你有没有看过,但到后来,我觉得应该和你的问题有关。
没有人说你说的不清楚啊,还不讲清楚是java,误差就会累计成非常大的数字,人家说你讲的不清楚,我也不明白你说的“启动服务器任务重复连续执行两次”是指什么,则将快速连续地出现两次或更多的执行。
如果由于任何原因(如垃圾回收或其他背景活动)而延迟了某次执行,延迟的越厉害,更新gui界面,java的问题问到这里,不妥,还是说你在别的地方提了相同的问题
Pia云这个商家的云服务器在前面也有介绍过几次,从价格上确实比较便宜。我们可以看到最低云服务器低至月付20元,服务器均采用KVM虚拟架构技术,数据中心包括美国洛杉矶、中国香港、俄罗斯和深圳地区,这次春节活动商家的活动力度比较大推出出全场6.66折,如果我们有需要可以体验。初次体验的记得月付方案,如果合适再续约。pia云春节活动优惠券:piayun-2022 Pia云服务商官方网站我们一起看看这次活...
ZJI是成立于2011年原Wordpress圈知名主机商—维翔主机,2018年9月更名为ZJI,主要提供香港、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册业务。本月商家针对香港阿里云线路独立服务器提供月付立减270-400元优惠码,优惠后香港独立服务器(阿里云专线)E3或者E5 CPU,SSD硬盘,最低每月仅480元起。阿里一型CPU:Intel E5-2630L...
Hostadvice主机目录对我们的服务进行了测试,然后给PQ.hosting颁发了十大WordPress托管奖。为此,宣布PQ.Hosting将在一周内进行折扣优惠,购买和续订虚拟服务器使用优惠码:Hostadvice ,全部优惠10%。PQ.hosting,国外商家,成天于2019年,正规公司,是全球互联网注册商协会 RIPE 的成员。主要是因为提供1Gbps带宽、不限流量的基于KVM虚拟的V...
scheduleatfixedrate为你推荐
决策树分析如何用SPSS生成决策树并对新数据进行预测分析宝应中学宝应县有哪些高中iso20000认证什么是ISO20000-IT服务管理体系知识分享平台全国知识共享的平台有哪些?扫图高清扫图是什么意思,在很多的贴吧里,都有提到一些高清扫图,是自己照杂志上的图片,然后自己再修一下吗搜索引擎的概念什么是搜索引擎?搜索引擎是如何工作的?自定义表情QQ自定义表情asp大马问:ASP是什么?ASP根据什么制作木马的?ASP木马和大马有什么区别?天翼校园宽带中国电信校园宽带怎么样?谷歌图片识别如何打开PICASA头像识别功能?
网站域名备案查询 vps推荐 如何注册中文域名 美元争夺战 linkcloud xfce parseerror 轻博 河南服务器 台湾谷歌地址 中国电信测速网 idc查询 如何安装服务器系统 常州联通宽带 万网空间管理 网购分享 路由跟踪 ebay注册 中国电信测速网站 广州主机托管 更多