作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所述的情况,我需要多个客户端来访问我的服务器。我的代码如下。
main(){
new thread(new class()).start();
}
void run(){
xyz();
}
xyz(){
switch(){
case 1:
read()
break;
case 2:
write()
}
}
我想确保 write() 何时由一个线程执行。 read() 不应被阻止。我有很多这样的功能,它们是相互关联的。我如何确保功能同步?我应该删除开关盒并使用同步块(synchronized block)吗?或者还有其他办法吗?
最佳答案
移除开关?但“切换”与同步无关。听起来,也许您真正的问题是要锁定哪些对象、锁定多少对象以及何时锁定。
你说,“我想确保当一个线程执行 write() 时,read() 不应该被阻塞。”
你的代码似乎已经做到了这一点。您没有向我们展示任何可以阻止 read() 调用与 write() 调用同时发生的内容。您想阻止什么?如果您只想防止并发 write() 调用,但不关心与 read() 调用同时发生的情况,那么可能如下所示:
private Object writerLock = new Object();
xyz(...) {
//same as in your example
}
private ... read(...) {
...
}
private ... write(...) {
synchronized(writerLock) {
...
}
}
关于java - 在java线程中执行同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22361314/
我是一名优秀的程序员,十分优秀!