Почему выводит не правильно поток счётчик?

Подскажите как настроить поток так что б counter выводил следующее: 0123456 а counter2 работал хаотично. Нельзя использовать synchronized.

В моём же случае оно инкрементрует сразу на 2-е еденицы, а нужно на 1-ну. Буду всем благодарен за помощь и совет!!!

Класс счётчика:

class Counter {
    private int counter = 0;
    private int counter2 = 0;
    Part3 part3;

    Counter(Part3 part3) {
        this.part3 = part3;
    }

    public void testSync() {
        System.out.println(counter + " " + counter2);
    }

    public void letsGO() {
        for (int i = 0; i < part3.k; i++) {
            test();
            incrementOne();
            try {
                Thread.sleep(part3.t);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            incrementTwo();
        }
    }

    public void incrementOne() {
        counter++;
    }

    public void incrementTwo() {
        counter2++;
    }
}

Класс MyThread:

class MyThread extends Thread {
    Counter counter;

    MyThread(Counter counter) {
        this.counter = counter;
    }

    @Override
    public void run() {
        counter.letsGO();
    }
}

Класс Part3 - класс вызова потока:

public class Part3 {

    volatile int k;
    volatile int t;
    volatile int n;


    Part3(int n, int k, int t) {
        this.k = k;
        this.t = t;
        this.n = n;
    }

    public static void main(String[] args) throws InterruptedException {
        Part3 part3 = new Part3(2, 3, 100);
        Counter counter = new Counter(part3);
        Thread[] thread = new Thread[part3.n];

        for (int i = 0; i < thread.length; i++) {
            thread[i] = new MyThread(counter);
            thread[i].start();
        }
    }
}

Ответы (1 шт):

Автор решения: instahipsta282

Вопрос не вполне корректный, так как непонятно, нельзя ли использовать synchronized вообще, или только в методе инкремента. Можно ли использовать потокобезопасные переменные(AtomicInteger вместо int) и так далее.

Пока что я просто обозначу тебе проблему - она в методе testSync(). Естественно, он не потокобезопасен, и печаетет результат как попало. Если ты пометишь его словом synchronized, то получишь то, что нужно.

→ Ссылка