【问题标题】:priority based update of file data and multithreading in JavaJava中基于优先级的文件数据更新和多线程
【发布时间】:2018-09-07 20:56:24
【问题描述】:

我不想在任何给定时间使用多个线程来修改一个文件,因为约束是

  • 每个线程都有一个正常或最高优先级。

  • 文件包含一个表格(比如说学生在特定科目中的分数(姓名、卷号))。

  • 任何可以被普通优先级线程修改的行以后都可以被任何线程修改。
  • 一旦某行被最高优先级线程修改,普通优先级线程就无法修改该特定行。

调度线程访问文件是可行的,但限制某些行被某些线程修改对我来说相当困难。 我怎样才能在java中完成上述任务? 考虑到我对 java 、多线程/并发编程和 java 中的文件解析非常陌生,请回答我的问题。 提前致谢。

【问题讨论】:

  • 这听起来像是你会使用数据库的东西。
  • 这对于这个站点来说感觉有点过于宽泛,因为它确实要求提供有关 Java 并发的教程。您可以找到大量资源来回答如何管理对文件的并发访问。最好的办法是实现一些代码来测试这些想法,并在您对该代码有特定问题时回来。
  • 我不想要整个解决方案,而是一种确保不同线程选择性访问的方法,但我认为我的问题不准确,让我问一下,这是一个包含几个牙刷的黑盒子,让我们假设整个家庭都有这种共享刷子的奇怪趋势,因此没有人拥有特定的刷子,但是有一个“家伙”,他用过的刷子对其他人来说是噩梦,所以他们想避免使用“家伙”使用的那些刷子.任何人都可以随时选择任何刷子。知道如何拯救家庭中的其他成员。

标签: java multithreading fileparsing


【解决方案1】:

据我了解,设计可以是:

class ToothBrushHolder{
   List<ToothBrush> toothBrushList;
   ToothBrush pickToothBrush{
        ToothBrush:pick the tooth brush from list
         }
   void useToothBrush(ToothBrush toothBrush){
        synchronize(toothBrush){
        if(toothBrush.getLastUsedBy!= "particularThreadName"){
          //perform the action
           toothBrush.setLastUsedBy("ThreadName);
      }else
        { can't use brush
           }
 }
 }

class ToothBrush{
    String ToothBrushID;
    String LastUsedBy;//setThreadname
   }

【讨论】:

    【解决方案2】:

    鉴于您不熟悉 Java 中的并发性,正确控制文件中特定行的并发修改可能特别困难。

    如果文件不是太大,可能更容易将其读入提供保证原子操作的标准数据结构(参见:https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html),或者创建自己的数据结构并实现同步方法进行更新那个数据结构。

    【讨论】:

    • 感谢链接先生,但我需要一个方法。你说很难确保修改特定行,一旦我会尽力理解这一点,你能不能试着解释一下困难的方式,而且它会比阅读整个文档更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多