Java同步游戏:synchronized \u0026\u0026 wait \u0026\u0026 notify
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java同步游戏:synchronized \u0026\u0026 wait \u0026\u0026 notify,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1433字,纯文字阅读大概需要3分钟。
内容图文
我来自.NET世界,不幸的是用.NET的眼睛看Java源代码.
以下代码来自Android应用程序(虽然根本不是Android特定的):
private class Worker implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
Worker(String name) {
Thread t = new Thread(null, this, name);
t.start();
synchronized (mLock) {
while (mLooper == null) {
try {
mLock.wait();
} catch (InterruptedException ex) {
}
}
}
}
public Looper getLooper() {
return mLooper;
}
public void run() {
synchronized (mLock) {
Looper.prepare();
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();
}
public void quit() {
mLooper.quit();
}
}
我不清楚同步的工作原理.
首先我认为synchronized是锁定mLock对象,但是如果在t.start()构造函数线程首先进入同步块之后,它将在mLock.wait()中阻止它,并通过阻止它进入synchronized来隐式阻止线程“t”块.
这显然是错误的,因为我的电话按照假设:)
接下来想到同步同步“代码块”(在这种情况下,有两个同步块是独立的=>线程可以同时无限制地输入两个不同的同步块),并且完全适合…
…直到我的同事告诉我mLock.wait()释放锁定mLock并允许其他线程同时进入mLock的关键部分.
我不确定我是否足够清楚,所以很乐意回答任何进一步的问题.
解决方法:
查看Object.wait()上的javadoc.这是“神奇的”,因为它会丢弃进入synchronized {}块时获取的监视器.这允许另一个线程获取监视器并调用Object.notify().
当另一个线程调用notify()从wait()调用中唤醒等待线程时,等待线程必须重新获取监视器并将阻塞直到它可以 – 监视器仅在wait()调用期间被丢弃.并且通知线程在新唤醒的等待线程可以继续之前完成其同步块.一切都按可预测顺序排列.
内容总结
以上是互联网集市为您收集整理的Java同步游戏:synchronized \u0026\u0026 wait \u0026\u0026 notify全部内容,希望文章能够帮你解决Java同步游戏:synchronized \u0026\u0026 wait \u0026\u0026 notify所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。