我需要船只同时装卸货物。有没有办法在java中做到这一点?我设法让多艘船同时在港口工作,但他们先卸货,然后再装载新的板条箱。那是我的 Ship 类变体public class Ship implements Runnable { String name; Port port; Queue<Goods> storage; Pier pier; int capacity; int numOnBoard; public Ship(String name, Port port, int capacity) { this.name = name; this.port = port; storage = new LinkedBlockingDeque<>(capacity); this.capacity = capacity; int num=(int)(Math.random()*capacity); numOnBoard=num; for (int i = 0; i < num; i++) { storage.add(new Goods()); } } public void run() { try { int unl = 0; int l = 0; pier = port.getPier(); System.out.println("Ship " + name + " taken " + pier.name); while (unload()) { if(unl>=numOnBoard) break; unl++; System.out.println("Ship " + name + " unloaded cargo."); Thread.sleep(new Random(100).nextInt(500)); } System.out.println("Ship " + name + " unloaded " + unl + " crates."); Thread.sleep(100); while (load()) { l++; System.out.println("Ship " + name + " loaded cargo."); Thread.sleep(new Random(100).nextInt(500)); } System.out.println("Ship " + name + " loaded " + l + " crates."); port.releasePier(pier); System.out.println("Ship " + name + " released " + pier.name); } catch (InterruptedException e) { e.printStackTrace(); } } private boolean unload() { if (storage.size() <= 0) return false; return port.addGoods(storage.poll()); } private boolean load() { if (storage.size() >= capacity) return false; return port.takeGoods(storage,numOnBoard); }}和港口
1 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
您试图在单个线程中完成的正是多个线程的目的。多线程使您能够以多种活动可以在同一程序中同时进行的方式编写:
多线程程序包含两个或多个可以并发运行的部分,每个部分可以同时处理不同的任务,从而优化利用可用资源,特别是当您的计算机有多个 CPU 时。
根据定义,多任务处理是指多个进程共享公共处理资源(例如 CPU)。多线程将多任务的概念扩展到应用程序中,您可以在其中将单个应用程序中的特定操作细分为单独的线程。每个线程都可以并行运行。操作系统不仅在不同的应用程序之间划分处理时间,而且在应用程序内的每个线程之间划分处理时间。
在此处阅读有关 Java 多线程的更多信息。
添加回答
举报
0/150
提交
取消