Я пытаюсь подсчитать 100 чисел с помощью многопоточности и однопоточности. Поскольку ключевое слово synchronized допускает только один поток за раз (это похоже на один поток), поэтому эти два метода ниже должны иметь примерно одинаковое время выполнения, если мы игнорируем эффект затрат времени на создание и синхронизацию потоков?
Многопоточность с использованием синхронизированного:
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
? - person Andy Turner   schedule 07.06.2016t3
. И вы не используетеsynchronized
. - person Andy Turner   schedule 07.06.2016sum
будет равно 100 в конце обоих. - person Andy Turner   schedule 07.06.2016