如何使用Java线程解决此问题

时间:2019-05-16 23:26:43

标签: java-threads

我已经解决了一些情况,但无法完全解决, 我在此链接中的回答: https://ideone.com/rShluk

道路施工。 Almafraq市区的装修已导致AABU的Main Street暂时关闭。只有一个车道保持开放。车道的宽度为10米,建筑区域的长度为100米。朝相反方向行驶的汽车必须协调其运动。此外,大学的学生也需要过马路。所有这些给每个人带来了很大的不便。警察运输部在街道单车道段的两侧和人行横道旁安装了临时交通信号灯。 PDOT还雇用您编写了一个程序,以根据以下规则协调交通信号灯的工作: -如果交叉路口是空的,汽车和行人都不应该等待; -汽车不能在单车道区域同时向相反的方向行驶; -行人不能在单车道区域停放汽车时过马路,但多名行人可以同时过马路; -如果有汽车在同一方向行驶,则汽车可以进入一个车道段,但是,不允许汽车通过另一辆车;

-一辆汽车不等待超过两辆向相反方向行驶;

-行人必须屈服,但行人不应等待两辆以上的汽车(双向)。

编写一个程序构建区,以协调构建区中的流量。您的程序应读取一个名为traffic.txt的文件,其中包含有关到达施工区域的交通的信息。示例文件如下

          0  E1  10 
          2  P1  1 
          4  E2  15 
          5  W1  10 

文件具有以下格式。每条线对应于汽车或行人。每个条目都是由空格分隔的三个字段的列表。上一个参与者到达后的第一条目秒数(第一行始终为0)。秒数始终是整数。第二个条目由字母和数字组成。字母为:E车向东,W-车向西或P-行人(字母始终为大写)。该数字是参与者的序列号。最后一个条目是建筑区域内参与者的速度(以米/秒为单位)。此条目是计算每个参与者在区域中花费的时间(以秒为单位)所必需的。请注意,行人必须过马路(10米),而汽车必须沿着这条街(100米)行驶。施工区域中的秒数应四舍五入。

创建三个函数walker(),carWest(),CarEast()。您的程序应读取输入文件,并在适当的时间为每个交通参与者启动一个线程。每个线程应执行相应的功能。

每个功能应包含三个部分:区域入口,区域交叉,区域出口。使用互斥量和条件变量,以确保交通量按照ODOT规则穿越施工区。在进入和退出之后,线程应宣布(打印)其动作。使用sleep_for()函数来实现跨越区域。每个参与者停留在区域中的时间量与其速度相对应。

程序的输出应如下所示:

  El entering construction 
  E2 entering construction 
  El exiting construction
  E2 exiting construction 
  Pl entering construction 
  P2 exiting construction 
  W1 entering construction 
  W1 exiting construction

0 个答案:

没有答案