如何在一个线程中同时执行多个动作?

我需要船只同时装卸货物。有没有办法在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);

    }

}

和港口


慕勒3428872
浏览 118回答 1
1回答

慕桂英3389331

您试图在单个线程中完成的正是多个线程的目的。多线程使您能够以多种活动可以在同一程序中同时进行的方式编写:多线程程序包含两个或多个可以并发运行的部分,每个部分可以同时处理不同的任务,从而优化利用可用资源,特别是当您的计算机有多个 CPU 时。根据定义,多任务处理是指多个进程共享公共处理资源(例如 CPU)。多线程将多任务的概念扩展到应用程序中,您可以在其中将单个应用程序中的特定操作细分为单独的线程。每个线程都可以并行运行。操作系统不仅在不同的应用程序之间划分处理时间,而且在应用程序内的每个线程之间划分处理时间。在此处阅读有关 Java 多线程的更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java