Я пытаюсь считать 100 номеров многопоточными и однопоточными. Поскольку синхронизируемое ключевое слово разрешает только один поток за раз (это похоже на один поток), поэтому эти два метода ниже должны иметь одинаковую рабочую среду приблизительно, если мы игнорируем влияние времени на создание и синхронизацию потоков?Синхронизированная многопоточность против одной нити
Многопоточность с использованием синхронизировано:
public synchronized static void increment() {
sum++;
}
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
increment();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
increment();
}
}
});
t1.start();;
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(sum);
однопоточную:
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
sum++
}
System.out.println(sum);
}
Что такое 't1' во втором подходе? Вы имеете в виду 't3'? –
да. Я отредактировал его. @AndyTurner – SHE
«Однопоточность с использованием синхронизации:« На самом деле, это многопоточность. У вас есть основной поток и 't3'. И вы не используете 'synchronized'. –