【发布时间】: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