0

3 つのスレッドの循環交換を作成する方法は? つまり、最初のスレッドは 2 番目にデータを送信し 2番目から3番目スレッドは最初にデータを送信する必要があります。

私はいくつかのコードを書きましたが、スレッドはランダムに交換されます。

class DataClass {

    int value;
    String message;

    DataClass(int v, String s) {
        value = v;
        message = s;
    }

    int getValue() {
        return (value);
    }

    String getMassage() {
        return (message);
    }
}

class Loop implements Runnable {

    int counter;
    String name;
    Exchanger<DataClass> exchanger;

    Loop(int startValue, String id, Exchanger<DataClass> ex) {
        counter = startValue;
        name = id;
        exchanger = ex;
        System.out.println(name + ": created");
    }

    public void run() {
        System.out.println(name + ": started");

        DataClass data = new DataClass(counter, name);

        for (int i = 0; i < 3; ++i) {
            try {
                DataClass newData = exchanger.exchange(data);
                counter += newData.getValue();

                System.out.println(name + ": from "
                        + newData.getMassage() + ": data: "
                        + newData.getValue() + ": state = " + counter);

            } catch (InterruptedException e) {
                System.err.println(e.toString());
            }
        }
        System.out.println(name + ": ended");
    }
}

public class ExchangerDemo {

    public static void main(String args[]) {
        System.out.println("Main process started");
        Exchanger<DataClass> exchanger = new Exchanger<DataClass>();
        Loop loop1 = new Loop(1, "First", exchanger);
        Loop loop2 = new Loop(2, "Second", exchanger);
        Loop loop3 = new Loop(3, "Third", exchanger);
        new Thread(loop1).start();
        new Thread(loop2).start();
        new Thread(loop3).start();
        System.out.println("Main process ended");
    }
}
4

1 に答える 1