public class Process {
public void produce( ) {
synchronized(this) {
// do stuff
wait( );
System.out.println("Done");
}
}
public void consume( ) {
synchronized(this) {
// stuff
notify();
Thread.sleep(5000);
}
}
}
您可以编写一个简单的程序来测试这个
public static void main(String[] args) throws Exception {
final Process e = new Process();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10);
e.consume();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
e.produce();
}
此程序等待5000毫秒并打印
Done
关于你的问题
因此,不,线程在调用notify()
时不会放弃对锁的控制。当代码退出synchronized
块时,就会发生这种情况。
2)另外,如果我有第三个同步的方法/线程,它不等待或通知,只是运行,我能预先预测我的操作执行的顺序吗?
你可以估计,但不能确定。执行由线程调度程序决定。
3)最后,notify()如何知道要“唤醒”什么线程?
电话不知道。线程调度程序知道并选择。你无法控制这一切。
wait()
和notify()
状态javadoc
因此,只有当您位于在对象上同步的synchronized
块内时,才能对该对象调用它们。
在您的代码示例中,调用
wait();
正在隐式地执行
this.wait();
问题内容: 我整天都在整理此问题,希望有人能帮助您确定我的问题。我已经使用Ajax在我的应用程序中创建了“异步进度回调”类型的功能。当我将功能剥离到测试应用程序中时,我得到了预期的结果。见下图: 所需功能 当我使用相同的代码将功能绑定到我的单页应用程序中时,出现了一种阻塞问题,其中所有请求仅在最后一个任务完成后才得到响应。在测试应用程序中,所有请求均会依次响应。服务器报告所有请求的状态(“待定”)
问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预
本文向大家介绍setTimeout和Promise的执行顺序?相关面试题,主要包含被问及setTimeout和Promise的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先我们来看这样一道题: 输出答案为2 10 3 5 4 1 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行 settimeout这种异步操作的回调,只有主线程
问题内容: 在HTML页面中包含JavaScript的方法有很多。我知道以下选项: 内联代码或从外部URI加载 包括在或标记[ [1],[2] ] 没有属性或属性(仅外部脚本) 包含在静态源中或由其他脚本动态添加(处于不同的解析状态,具有不同的方法) 不计算硬盘中的浏览器脚本,javascript:URI和-attributes [[3] ],已经有16种方法可以使JS执行,我敢肯定我忘了一些东西
我有一份由不同的工作组成的工作。我希望在其他作业步骤完成后,一起触发一批这些作业步骤(JobStep1、JobStep2、JobStep3)(在不同的线程中与AsyncTaskExecutor一起运行)和最后一个作业步骤(JobStep4)。因此,我为每个JobStep创建了不同的流,并用AsyncTaskExecutor将它们放在一个流中。我还为最后一个JobStep做了一个单独的流。 完成工作
问题内容: 在Java8中运行以下流示例: 产量: 当然-这并不奇怪。由于http://docs.oracle.com/javase/8/docs/api/index.html?overview- summary.html ,流是顺序执行还是并行执行都没有关系: 除了标识为明确不确定的操作(例如findAny())之外,流是顺序执行还是并行执行都不应该更改计算结果。 AFAIK 是确定性的并且是关