【问题标题】:Placement of Thread Content. How do you know what goes inside of the thread, and what doesn't?主题内容的放置。你怎么知道线程内部有什么,什么没有?
【发布时间】:2016-10-24 12:52:04
【问题描述】:

总的来说,这是一个研究生水平的家庭作业,很多作业都被省略了,但我认为我已经付出了足够的努力来明确我的问题。总之,提示如下。

提示:

假设您有一组文件 (file_0...file_N) 由一组线程 (thread_0...thread_m) 访问。
还有一个共享状态表,指示每个文件的状态(关闭、打开以读取、打开以写入)。当一个线程需要访问一个文件时,它必须首先 通过状态表检查文件的状态。 以下是选项:

如果文件已关闭,则授予立即访问权限。

如果文件已打开以供写入,则线程必须在队列中等待该文件。

如果文件已打开以供读取,并且新请求也用于读取,则该文件的读取计数器递增并授予访问权限。

如果文件已打开以供读取并且新请求是用于写入,则线程将被放置在队列中以访问该文件。

使用 Lock 变量来同步对状态表的访问。状态表应该作为一个类来实现;因此,线程必须在调用状态之前获取锁 表方法。实际的状态表可以使用数组或 ArrayList 来实现,其中元素是具有与单个文件相关的属性(状态、读取计数等)的对象。

结束提示

现在,鉴于此,我被困在哪里是什么去哪里?我清楚地假设我们至少需要一个主线程表、一个线程表和一个线程类。我通常更喜欢保持 main 干净,所以我使用第四个类来完成主要工作,并让 main 引用它。

主要问题是这一切的结构如何?我多次尝试构建这个结构,到目前为止,所有这些都导致了冲突,或者根本没有意义的事情。我当前的迭代在主功能类中包含所有内容,但是线程是空的,几乎只剩下一个类带有封装变量,另一个类带有内容。

更简洁地说,这是我的问题。

  • 读/写操作的决定逻辑在哪里?线程内部还是外部?
  • 实际读取文件会发生在哪里?线程内部还是外部?
  • 一般来说,关于这种类型的编程,线程会包含哪些内容?
  • 究竟什么是我没有放入线程的?

【问题讨论】:

  • 我感觉你混合了 2 个不同的概念:类和线程。这就是让你感到困惑的地方。我建议,你首先确定你的班级候选人。即:从需求文本中,您可以识别实体及其职责。例如:“Statustable”- 1 类持有 FileInformation。还有你的下一个实体:FileInformation 类,它保存读取计数器、一个特定文件的锁等......这些位于 Statustable 类的 ArrayList 中。到目前为止,一切都很好。接下来你有你的消费者(想要访问文件的实体)......
  • 消费者很可能在多个线程上执行。因此它们必须与您的关键资源(状态表)同步。
  • 这是一个很好的说明。在这种情况下,我假设这意味着读取和写入都必须放在线程中,因为它们需要同时发生。

标签: java multithreading java-threads


【解决方案1】:

您可能需要一个ReadWriteLock,它可以完成您被要求执行的大部分操作。

读/写操作的决定逻辑在哪里?线程内部还是外部?

每个线程必须使用锁来锁定它需要的资源,因此逻辑在线程中(或使用线程使用的其他东西)。

实际读取文件会发生在哪里?线程内部还是外部?

在线程中 - 在您锁定资源之后。

一般来说,关于这种类型的编程,线程会涉及什么?

只有属于那里的东西 - 没有别的:)

究竟什么是我没有放入线程的?

UI(用户界面)代码。

【讨论】:

  • 嗯,这就是这个程序的问题。里面有什么?更具体地说,在这个程序中,我怎么知道线程中应该和不应该是什么。我无法弄清楚线程的实际内容是什么。
  • 没有“线程的内容”。只有代码会同时执行。共享资源的代码也将在该线程上执行,但也将在另一个线程上执行,但不会同时...(不是同时)。
  • 所以要求澄清一下,这是否意味着线程中唯一应该是并发运行的东西?
  • @Xenorosth 大多数网站完全在线程中运行。 main 线程只是坐在那里等待它们全部完成(而且大多数都没有)。对于线程中应该包含什么和不应该包含什么,没有真正的规则。您需要同时运行的东西应该是线程内的,但这不是结束。给你时间你会明白的。
  • 这是家庭作业。使用读取器/写入器锁会作弊:要求 OP 实现读取器/写入器锁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2014-03-12
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
相关资源
最近更新 更多