Panduan Sinkronisasi di Java

Diterbitkan: 2022-10-23

Sebelum kita menjelaskan sinkronisasi di Java , kita harus meninjau kembali konsep multithreading secara singkat. Fitur multithreading Java memungkinkan eksekusi simultan dari dua atau lebih bagian program untuk penggunaan CPU yang maksimal. Setiap bagian dari program semacam itu adalah utas, dan utas adalah proses ringan dalam suatu proses.

Sekarang, beberapa utas program mungkin mencoba mengakses sumber daya yang sama dan menghasilkan hasil yang tidak akurat. Jadi, harus ada sinkronisasi untuk memastikan bahwa hanya satu utas yang memiliki akses ke sumber daya pada titik waktu tertentu.

Lihat kursus teknologi gratis kami untuk mendapatkan keunggulan dalam persaingan.

Panduan tentang apa itu sinkronisasi di Java akan mengeksplorasi konsep sinkronisasi secara rinci dengan contoh-contohnya.

Pelajari Kursus Pengembangan Perangkat Lunak online dari Universitas top dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.

Daftar isi

Apa itu sinkronisasi di Jawa?

Sinkronisasi Java adalah kemampuan untuk mengontrol akses beberapa utas ke sumber daya bersama. Ini berguna ketika program Java multi-utas mencoba mengakses sumber daya yang sama dan menghasilkan hasil yang salah. Menggunakan fitur sinkronisasi Java, hanya satu utas yang dapat mengakses sumber daya pada titik waktu tertentu.

Java menyediakan cara untuk menyinkronkan tugas utas menggunakan blok tersinkronisasi yang menyinkronkan pada objek yang sama dan hanya dapat memiliki satu utas yang dieksekusi di dalamnya pada satu waktu. Blok ini ditandai dengan kata kunci yang disinkronkan, memblokir utas lain yang mencoba masuk ke blok yang disinkronkan sampai utas yang sudah ada di dalam blok mengakhiri eksekusi dan meninggalkan blok.

Lihat Sertifikasi Tingkat Lanjut upGrad di DevOps

Sintaks untuk Menulis Blok yang Disinkronkan

Sintaks umum untuk menulis blok tersinkronisasi di Java adalah sebagai berikut:

disinkronkan (lockObject)

{

// pernyataan yang disinkronkan

}

Jelajahi Kursus Rekayasa Perangkat Lunak Populer kami

Master of Science dalam Ilmu Komputer dari LJMU & IIITB Program Sertifikat Keamanan Siber CTME Caltech
Bootcamp Pengembangan Tumpukan Penuh Program PG di Blockchain
Program PG Eksekutif dalam Pengembangan Tumpukan Penuh
Lihat Semua Kursus kami Di Bawah
Kursus Rekayasa Perangkat Lunak

Dalam sintaks di atas, lockObject mengacu pada objek yang kuncinya terkait dengan elemen yang disinkronkan. Sekarang, itu membawa kita ke konsep kunci di Jawa.

Lihat Sertifikasi Lanjutan dari Grad dalam Keamanan Siber

Kunci di Jawa

Sinkronisasi di Java dibangun di sekitar kunci atau monitor. Setiap objek memiliki kunci terkait. Idealnya, utas yang memerlukan akses ke bidang objek harus terlebih dahulu mendapatkan kunci objek. Kunci adalah mekanisme sinkronisasi utas yang lebih canggih dan fleksibel daripada blok sinkronisasi. Ini didefinisikan di dalam paket java.util.concurrent.lock yang berisi implementasi kunci ekstensif.

Keterampilan Pengembangan Perangkat Lunak Sesuai Permintaan

Kursus JavaScript Kursus Inti Java Kursus Struktur Data
Kursus Node.js Kursus SQL Kursus pengembangan tumpukan penuh
Kursus NFT Kursus DevOps Kursus Data Besar
Kursus React.js Kursus Keamanan Cyber Kursus Komputasi Awan
Kursus Desain Basis Data Kursus Python Kursus Mata Uang Kripto

Metode Sinkronisasi Java

Tujuan metode sinkronisasi Java adalah untuk mengunci objek untuk sumber daya bersama. Jadi, ketika utas memanggil metode yang disinkronkan, metode tersebut secara otomatis mendapatkan kunci untuk objek itu dan melepaskannya setelah utas menjalankan tugasnya.

Berikut ini contoh metode sinkronisasi Java:

//contoh metode sinkronisasi java

tabel kelas{

void tersinkronisasi printTable(int n){//synchronized method

untuk(int i=1;i<=5;i++){

System.out.println(n*i);

mencoba{

Thread.sleep(400);

}catch(Pengecualian e){System.out.println(e);}

}

}

}

kelas MyThread1 memperluas Thread{

Tabel t;

MyThread1(Tabel t){

ini.t=t;

}

menjalankan kekosongan publik (){

t.printTable(5);

}

}

kelas MyThread2 memperluas Thread{

Tabel t;

MyThread2(Tabel t){

ini.t=t;

}

menjalankan kekosongan publik (){

t.printTable(100);

}

}

TestSynchronization2 kelas publik{

public static void main(String args[]){

Tabel obj = Tabel baru();//hanya satu objek

MyThread1 t1=baru MyThread1(obj);

MyThread2 t2=baru MyThread2(obj);

t1.mulai();

t2.mulai();

}

}

Baca Artikel Populer kami yang terkait dengan Pengembangan Perangkat Lunak

Bagaimana Menerapkan Abstraksi Data di Jawa? Apa itu Kelas Dalam di Jawa? Java Identifiers: Definisi, Sintaks, dan Contoh
Memahami Enkapsulasi dalam OOPS dengan Contoh Argumen Baris Perintah di C Dijelaskan 10 Fitur & Karakteristik Terbaik Cloud Computing di tahun 2022
Polimorfisme di Jawa: Konsep, Jenis, Karakteristik & Contoh Paket di Java & Bagaimana Cara Menggunakannya? Tutorial Git Untuk Pemula: Belajar Git dari Awal

Keluaran:

5

10

15

20

25

100

200

300

400

500

Apa yang terjadi tanpa sinkronisasi?

Sekarang, mari kita lihat program sebelumnya tanpa sinkronisasi (perhatikan tidak adanya kata kunci yang disinkronkan).

tabel kelas{

void printTable(int n){//metode tidak disinkronkan

untuk(int i=1;i<=5;i++){

System.out.println(n*i);

mencoba{

Thread.sleep(400);

}catch(Pengecualian e){System.out.println(e);}

}

}

}

kelas MyThread1 memperluas Thread{

Tabel t;

MyThread1(Tabel t){

ini.t=t;

}

menjalankan kekosongan publik (){

t.printTable(5);

}

}

kelas MyThread2 memperluas Thread{

Tabel t;

MyThread2(Tabel t){

ini.t=t;

}

menjalankan kekosongan publik (){

t.printTable(100);

}

}

kelas TestSynchronization1{

public static void main(String args[]){

Tabel obj = Tabel baru();//hanya satu objek

MyThread1 t1=baru MyThread1(obj);

MyThread2 t2=baru MyThread2(obj);

t1.mulai();

t2.mulai();

}

}

Keluaran:

5

100

10

200

15

300

20

400

25

500

Seperti yang Anda lihat, output tidak konsisten tanpa sinkronisasi.

Jenis Sinkronisasi di Jawa

Untuk menjawab apa itu sinkronisasi utas di Java , kami memiliki dua jenis sinkronisasi yang tersedia: sinkronisasi utas dan sinkronisasi proses.

Mari kita pahami apa artinya masing-masing.

Sinkronisasi utas: Ketika beberapa utas mencoba mengakses sumber daya bersama, kami harus memastikan bahwa sumber daya digunakan hanya oleh satu utas pada satu waktu. Sinkronisasi utas adalah proses yang mengizinkan hanya satu utas untuk menggunakan sumber daya bersama ketika beberapa utas mencoba menggunakan sumber daya secara bersamaan.

Sinkronisasi proses: Ini mengacu pada eksekusi simultan dari beberapa proses untuk mencapai keadaan di mana proses berkomitmen pada urutan eksekusi yang sesuai. Sinkronisasi proses diperlukan ketika dua atau lebih proses bekerja sama, dan eksekusi satu proses mempengaruhi proses lainnya. Dengan demikian, sinkronisasi proses menghilangkan kemungkinan output yang tidak akurat dan menjamin urutan eksekusi yang tepat.

Metode Sinkronisasi di Java

Secara garis besar, ada empat metode sinkronisasi di Java:

  • Metode statis yang disinkronkan
  • Metode instance yang disinkronkan
  • Blok yang disinkronkan di dalam metode statis
  • Blok yang disinkronkan di dalam metode instance

Mari kita lihat setiap metode sinkronisasi Java secara lebih rinci.

Metode statis yang disinkronkan

Di sini, kami menggunakan kata kunci yang disinkronkan untuk menandai metode statis di Java. Berikut ini contoh metode statis tersinkronisasi Java:

MyStaticCounter statis publik {

hitungan int statis pribadi = 0;

kenaikan void tersinkronisasi statis publik (nilai int) {

hitung += nilai;

}

}

Metode instance yang disinkronkan

Saat menggunakan blok yang disinkronkan dengan metode instan, setiap objek memiliki metode yang disinkronkan. Setiap objek hanya dapat memiliki satu utas yang dapat dieksekusi di dalam suatu metode. Jika ada beberapa objek, satu utas dapat dieksekusi untuk setiap objek di dalam blok.

MyCounter kelas publik {

jumlah int pribadi = 0;

kenaikan void yang disinkronkan publik (nilai int) {

this.count += nilai;

}

pengurangan kekosongan yang disinkronkan publik (nilai int) {

this.count -= nilai;

}

}

Blok yang disinkronkan di dalam metode statis

Di bawah ini adalah contoh di mana kami menggunakan blok yang disinkronkan di dalam metode statis:

kelas publik kelasku {

public static void print(Pesan string) {

disinkronkan(KelasSaya.kelas) {

log.writeln(pesan);

}

}

}

Blok yang disinkronkan di dalam metode instance

Alih-alih menyinkronkan seluruh metode, kita dapat menggunakan tersinkronisasi pada blok tertentu di dalam metode. Di bawah ini adalah contoh blok kode yang disinkronkan di dalam metode yang tidak disinkronkan:

kenaikan kekosongan publik (nilai int) {

disinkronkan (ini) {

this.count += nilai;

}

}

Perlu Sinkronisasi di Jawa

Sekarang setelah Anda mengetahui apa itu sinkronisasi di Java , Anda mungkin bertanya-tanya mengapa kami menggunakannya sejak awal.

Kata kunci tersinkronisasi Java menyediakan fungsionalitas penting untuk pemrograman bersamaan. Inilah cara sinkronisasi di Java membantu:

  • Sinkronisasi Java menyediakan fitur penguncian untuk menghilangkan kondisi balapan di antara utas dan memastikan akses yang saling eksklusif ke sumber daya bersama.
  • Penguncian yang disinkronkan Java menyediakan fitur penguncian dan pembukaan kunci. Jadi, utas perlu mendapatkan kunci sebelum memasukkan metode atau blok yang disinkronkan.
  • Kata kunci yang disinkronkan mencegah penyusunan ulang pernyataan program oleh kompiler.

Kesimpulan

Ringkasnya, sinkronisasi di Java memastikan bahwa hanya satu utas yang dapat mengakses sumber daya bersama pada satu waktu. Kita dapat membuat blok atau metode tersinkronisasi menggunakan kata kunci tersinkronisasi Java. Ketika sebuah utas ingin masuk ke dalam blok yang disinkronkan, ia harus mendapatkan kunci, dan setelah meninggalkan blok, utas melepaskan kunci. Kita dapat menggunakan kata kunci yang disinkronkan baik dengan metode atau di dalam blok metode.

Apakah Anda ingin mempelajari konsep inti di Java? Program Pascasarjana Eksekutif upGrad dalam Pengembangan Perangkat Lunak – Spesialisasi dalam kursus Pengembangan Tumpukan Penuh adalah program 7 minggu online untuk pemula yang ingin menjelajahi karir pengembangan perangkat lunak. Hadiri kelas langsung dan interaktif, sesi latihan, dan lebih dari 35 jam konten yang disampaikan oleh para pemimpin industri untuk mendapatkan sertifikat kelulusan dari upGrad.

Daftar hari ini untuk memanfaatkan manfaat eksklusif upGrad dari dukungan siswa 24/7 dan jaringan industri!

Mengapa kami menggunakan tersinkronisasi di Jawa?

Kata kunci yang disinkronkan di Java memastikan bahwa hanya satu utas yang dapat mengakses sumber daya bersama pada satu waktu. Ini berguna ketika program Java multithreaded mencoba mengakses sumber daya yang sama dan menghasilkan hasil yang tidak akurat.

Bagaimana sinkronisasi diimplementasikan di Jawa?

Java mengimplementasikan sinkronisasi menggunakan konsep monitor dengan hanya satu thread yang memiliki monitor pada waktu tertentu. Ketika sebuah utas memperoleh kunci, ia mendapat akses ke monitor, dan semua utas lainnya yang mencoba masuk ke monitor yang terkunci tetap diblokir hingga utas pertama meninggalkan monitor.

Apa itu kebuntuan di Jawa?

Kebuntuan Java terjadi ketika sebuah utas menunggu kunci objek, tetapi utas lain memperolehnya, dan utas kedua menunggu kunci objek yang diperoleh oleh yang pertama. Oleh karena itu, kedua utas menunggu satu sama lain untuk melepaskan kunci, menghasilkan kebuntuan.