让我假装我在程序中运行了两个线程。两个线程都到达一个节点(如树或地图中),用户必须在该节点中输入数据才能继续线程。通常,如果节点是同步的,那么首先到达该节点的线程将等待输入,同时阻止任何其他线程到达该节点。
问题是:
有没有办法通过让他超过1号线来容纳2号线(被锁定的那个人)?另外,是否可以在不导致线程1退出的情况下执行此操作?
我已经知道你可以有一个输入数据的时间限制,这样如果线程1在节点上停留的时间太长,那么线程1会被关闭但是可以让线程2“通过”可以这么说吗?
别介意别人,我想我弄明白了,我的问题很糟糕,但感谢您的努力。
答案 0 :(得分:2)
如果我的问题正确,答案是java.util.concurrent.locks.Lock.tryLock()
。只需使用它而不是synchronized
关键字。
答案 1 :(得分:0)
为什么要锁定(同步)等待输入?
只有在实际修改多线程有权访问的内容时才应该锁定(同步)。
编辑:更清楚:线程#2应该等待的唯一原因是:
A)需要修改线程#1正在修改的内容。
B)它依赖于(需要阅读)线程#1正在修改的东西。
否则,您的锁定范围太宽。
答案 2 :(得分:0)
我不是如何编写代码的专家,但Java Concurrency In Practice涵盖了这个确切的场景以及如何使用java.util.concurrent中的类来构造它。这本书物有所值。