【问题标题】:Multithreading, Locks多线程,锁
【发布时间】:2014-05-09 09:42:33
【问题描述】:

让我们考虑一个有多个锁的系统。假设进程 A 想要获取锁。 传统的方法是争夺锁并最终得到它。取而代之的是,我们可以做 有些不同?能不能把需要执行的任务交给当前线程 有锁吗?在这种情况下,不需要获取锁。我们如何实现这一目标,并确保 该方法快速、高效且公平。让我们假设一个任务由一个类表示, 它有一个方法,运行。然后我们可以只传递该类的一个实例。现在让我们描绘一个 可能发生的情况。 Thread A 拥有锁,thread B 想要获取它。 Thread B 给出了它的 任务到thread A。到那时thread A 已经解锁并离开了。 Thread B 将永远等待。我们需要 处理这种特殊情况

【问题讨论】:

  • 为什么要用那种奇怪的第一人称学术语气写作?它只是让它读起来像一个家庭作业问题,在这种情况下使它更难阅读。
  • 我猜你说的是排队吧??
  • 我认为你的问题对于stackoverflow来说太笼统了。如果您正在尝试解决特定问题,请发布您为解决该问题而编写的代码,告诉我们您对自己的解决方案不满意的原因,并询问是否有人能找到更好的解决方案。
  • @Human 那是因为它是。这是他的一位同学,完全相同:stackoverflow.com/questions/23571683/…

标签: java multithreading locks


【解决方案1】:

线程通信可以通过几种不同的方式实现,例如队列、环形缓冲区等。通常,争用锁代表了在共享资源上协作的默认方式,但它并不能作为方法进行扩展。

提出的包括共享任务的方法可以被认为是通过通信进行协作。在这种情况下,线程 A 接收来自线程 B 的任务,假设在队列 X 上,完成后线程 A 在队列 Y 上响应线程 B。像这样,没有要获取的锁,假设队列已经同步或线程安全(例如 Java 1.5 之后的并发版本)。

综上所述,需要区分这两种情况:通过1.锁定或2.通信的方式进行合作(即根据您的示例进行任务交换)。这是面对这类问题的基本方法。无论如何,如果您对场景的定义更加精确,也许我们可以更轻松地帮助您设计并发解决方案/算法。

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2018-06-16
    • 1970-01-01
    • 2021-09-23
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多