Apakah AtomicInteger menangani sinkronisasi?

Aug 17 2020

Jika dua utas bertambah sama int imenggunakan i ++ , kita bisa mendapatkan masalah, karena i ++ bukanlah operasi atom. Itulah mengapa ada AtomicInteger.increment(), yang membuat atom bertambah. Jadi jika kami memiliki 1 inti dan 2 utas yang dilakukan .increment(), sama sekali tidak ada masalah (karena tidak dapat ditangguhkan di tengah operasi).

Tetapi bagaimana jika kita memiliki 2 inti dan 2 utas dan mereka secara paralel (pada saat yang sama) menyebutnya increment()?

Mungkinkah ada kemungkinan mereka memuat nilai yang sama int i? Artinya jika int iitu 1 , hasil akhirnya akan menjadi 2 dan tidak 3 . Dalam hal ini kami tidak peduli apakah ini operasi atom karena keduanya mengambil nilai yang sama pada waktu yang sama ..

Intinya: apakah sinkronisasi ditangani oleh AtomicInteger?

Jawaban

3 Joni Aug 17 2020 at 12:04

Mungkinkah ada kemungkinan mereka memuat nilai yang sama int i?

Ya, ada, tapi sudah ditangani untuk Anda.

The incrementAndGetMetode menggunakan atom "membandingkan dan set" operasi yang set nilai bertambah tetapi hanya jika nilai baru belum ditetapkan . Jika pembandingan gagal, incrementAndGetambil nilai baru dan coba lagi.

Efek bersihnya adalah, aman digunakan incrementAndGetdari banyak utas.