|
|
1
6
Q1)
最好的资源可能是
JavaDoc
用于条件类。条件变量是一种机制,允许您在允许方法继续进行之前测试特定条件是否为真。对于您的示例,有两个条件:
示例中显示的Put方法等待
任何更改条件变量的调用都需要在同步区域内-这可以通过内置的
Q2) 定时等待对于调试很有用,因为它们允许您在线程未通过信号唤醒时记录信息。
使用
Q4)
严格来说,不,你不需要打电话
|
|
|
2
3
Q1: 一 Condition 对象与锁(又称互斥体)对象相关联(并从中获取)。类的JavaDoc对于其用法和应用程序相当清楚。要在需要获得锁的情况下等待,最好在try/finally块(如您所拥有的)中这样做。一旦获取锁的线程等待该锁的条件,锁就会自动放弃。 Q2: 使用定时等待是必要的,以确保您的程序的活力,在这种情况下,您正在等待永远不会发生。它绝对是一个更复杂的形式,如果你不检查你已经超时的事实,并采取行动来处理超时的情况,它是完全无用的。 使用sleep是等待某件事情发生的一种可接受的形式,但是如果您已经在使用一个锁(“mutex”),并且拥有该锁的条件变量,那么不使用它是没有意义的。 use the time wait method of the condition : 例如,在代码中,您只是在等待给定的时间段,但不检查条件是否发生或是否超时。(这是一个bug。)您应该做的是检查您的定时调用是否返回了真或假。(如果返回false,则超时,并且条件尚未发生(尚未发生))。
第3章:[编辑] 代码片段需要更详细的上下文才能理解。例如,它并不完全清楚线程中的条件是否都相同(但我假设它们是相同的)。 如果您所要做的就是确保commonActivity()一次只由一个线程执行,并且commonActivity()的某些部分不需要争用控制,并且您确实需要该工具在等待时超时,那么您可以 simply use a Semaphore . 请注意,Sempahore对于 timed waits . 如果所有的commonActivity()都是关键的,并且您真的不介意等待(没有超时),只需将commonActivity()变成一个同步的方法。 [最终编辑:]) 为了更正式地说明这一点,条件通常用于两个或多个线程在一个任务上协同工作并且需要在线程之间进行交接的场景。 例如,您有一台服务器正在处理对用户请求的异步响应,而用户正在等待将来对象的实现。在这种情况下,条件是完美的。未来的实现正在等待条件,服务器发出完成的信号。 在过去,我们将使用wait()和notify(),但这不是一个非常健壮(或非常安全)的机制。锁和条件对象被精确地设计来解决这些缺点。 |
|
3
0
Q1 . 我相信通过“条件变量”,你指的是你检查以确定你等待的条件的东西。例如-如果您有典型的生产者-消费者情况,您可能会将其实现为如下所示:
但是,由于假线程唤醒的可能性,使用者方法可能会从
使用
在你的情况下,你已经用
Q2
. 定时等待通常是一个好的实践-超时允许您定期对环境执行健全性检查(例如,关闭类型标志已翻转),而非定时等待只能由中断停止。另一方面,如果等待只是一直阻塞直到条件成立,那么它没有什么区别,它每50毫秒唤醒一次,直到
至于wait()和sleep()-前者通常更可取,因为它意味着一旦你能采取行动,你就会被唤醒。
第3季度 . 通过-看起来那里有很多样板文件,而且因为代码中没有任何注释 和 你还没有解释它应该做什么,以及它应该如何表现,我不会尝试用你写的东西来逆向工程。;-) |
|
|
4
0
Q1。条件变量是
monitors facility
它有时用于线程同步。我不认识这种特殊的实现,但通常情况下,条件变量的使用必须在关键部分完成,因此
Q2。
Q3。我不确定,但我认为您可以在Java中使用内置监视器功能:
|
|
|
5
0
Q1。
我想
documentation
描述得很好。是的,对
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |