本文共 1610 字,大约阅读时间需要 5 分钟。
在这个问题中,我们需要编写一个多线程应用程序,模拟多个人通过山洞的情况。山洞每次只能通过一个人,每个人通过山洞的时间为5秒。我们需要随机生成10个人的名字(分别为“ONE”到“TEN”),并让他们同时通过山洞。目标是显示每次通过山洞的姓名。
public class Pass implements Runnable { private Object lock = new Object(); // 同步锁 public void run() { synchronized (lock) { // 使用同步锁确保只一个线程通过 System.out.println("当前通过的线程名:" + Thread.currentThread().getName()); try { Thread.sleep(5000); // 让每个人通过山洞的时间为5秒 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Pass p = new Pass(); // 创建随机的人员名字 String[] names = new String[10]; for (int i = 0; i < 10; i++) { names[i] = String.valueOf((int) Math.floor(Math.random() * 10) + 1); // 生成1到10的随机数字 } for (String name : names) { Thread thread = new Thread(p, name); thread.start(); } }} Object对象作为同步锁。每个线程在进入同步块之前必须先获得锁定,这样可以确保只一个线程能通过山洞。Thread.currentThread().getName()获取。由于我们需要随机生成名字,代码中使用了Math.random()生成随机数字。Thread.sleep(5000)),这意味着每个人通过山洞的时间为5秒。main方法中,我们生成了10个随机名字,确保每次运行都有不同的名字组合。运行上述代码,你将看到每个线程依次打印自己的名字,并等待5秒后继续下一步。由于我们使用了同步锁,每次只会有一个线程通过山洞。
通过这个例子,我们展示了如何使用多线程和同步机制来模拟多个人通过山洞的情况。每个线程代表一个人,同步锁确保了山洞只能让一个人通过。随机生成名字使得每次运行都有不同的结果。
转载地址:http://wzne.baihongyu.com/