Сомневаюсь, параллельное программирование в Java

Я редактировал этот вопрос только на тот случай, если он не совсем понятен. Я делаю Java-программу с потоками, это программа, где 10 роботов (потоков) используют ресурс одновременно (100 штук), но чтобы использовать кусок, вам нужно иметь отвертку и балансировщик, из которых доступно только 3 каждого. Когда у робота есть отвертка и балансир, вы можете использовать кусок, а затем отпустить отвертку и балансир.

Я думаю, что программа работает правильно, но если кто-то может это подтвердить, я был бы очень признателен.

Я оставляю ссылку на папку класса: Ссылка

· Главная

public class Main {

    public static void main(String[] args) {

        CentroDeMontaje montaje = new CentroDeMontaje();

        for(int d=0;d<=3;d++)
            for(int e=0;e<=3;e++)
                for(int i=1;i<11;i++) {
                    Robots robots = new Robots(montaje, i, d, e);
                    robots.start();
                }
        montaje.robotsEnAccion();
    }
}

· Центр монтажа

public class CentroDeMontaje {

    int piezas = 100;
    int numPiezasConsumidas = 0;

    public synchronized void robotsConstructores(int numRobot, int idDestornillador, int idEquilibrador) {
        while (piezas == 0) {
            try {
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(idDestornillador==0) {
            System.out.println("El robot "+numRobot+" está esperando para coger un destornillador.");
        }else {
            System.out.println("El robot "+numRobot+" ha cogido el destornillador "+idDestornillador);
        }
        if(idEquilibrador==0) {
            System.out.println("El robot "+numRobot+" está esperando para coger un equilibrador.");
        }else {
            System.out.println("El robot "+numRobot+" ha cogido el equilibrador "+idEquilibrador);
        }

        if(idDestornillador>0 && idEquilibrador>0) {
            piezas--;
            numPiezasConsumidas++;
            System.out.println("El robot "+numRobot+" terminó con la pieza "+numPiezasConsumidas+" y suelta el destornillador "+idDestornillador);
            System.out.println("El robot "+numRobot+" terminó con la pieza "+numPiezasConsumidas+" y suelta el equilibrador "+idEquilibrador);
        }
    }

    public synchronized void robotsEnEspera() {
        try {
            wait();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public synchronized void robotsEnAccion() {
        notifyAll();
    }
}

· роботы

public class Robots extends Thread{
    CentroDeMontaje montaje;
    int numRobot;
    int idDestornillador;
    int idEquilibrador;

    public Robots(CentroDeMontaje montaje, int numRobot, int destornilladores, int equilibradores){
        this.montaje=montaje;
        this.numRobot=numRobot;
        this.idDestornillador=destornilladores;
        this.idEquilibrador=equilibradores;
    }

    @Override
    public void run() {
        for(int i=1;i<11;i++) {
            montaje.robotsConstructores(numRobot, idDestornillador, idEquilibrador);
            yield();
        }
    }
}

Большое спасибо заранее.

1
задан 28.11.2019, 01:12
1 ответ

Уже я смог решить неудачу, у которой была программа, если он интересует кого-то, я оставляю aquГ - она soluciГіn и mГЎs внизу ссылку. Приветствие.

В классе main нужен изменять эти циклы for, так что вместо того, чтобы увеличивать от 0 до 3, он уменьшает от 3 до 0, bГЎsicamente в revГ©s как это tenГ - в ранее.


        for(int d=3;d>=3;d--)
            for(int e=3;e>=3;e--)

Надеялся, что в кого-то он подает его, так как это в конце концов упражнение programaciГіn в java с трэдами.

Ссылка проекта

1
ответ дан 01.12.2019, 10:53