Rumah  >  Artikel  >  Java  >  Blok Disegerakkan di Jawa

Blok Disegerakkan di Jawa

王林
王林asal
2024-08-30 15:58:55861semak imbas

Di Java, blok Disegerakkan membantu dalam melaksanakan penyegerakan pada mana-mana sumber tertentu fungsi atau kaedah. Jika terdapat 100 baris kod(LOC) dan penyegerakan perlu dilakukan hanya untuk 10 baris, maka blok yang disegerakkan boleh digunakan. Disegerakkan boleh digunakan sebagai kata kunci, kaedah dan blok. Dalam tutorial ini, kami akan membincangkan blok yang disegerakkan secara terperinci.

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Sintaks:

Sintaks blok yang disegerakkan adalah seperti yang ditunjukkan di bawah:

Synchronized( lo)
{
//statements that have to be synchronized
}

Di sini, lihatlah objek kunci

Bagaimanakah Blok Disegerakkan Berfungsi dalam Java?

Seperti yang telah dibincangkan, blok Disegerakkan membantu dalam melaksanakan penyegerakan pada mana-mana sumber tertentu fungsi atau kaedah. Apabila utas perlu melaksanakan baris yang disegerakkan di dalam blok disegerakkan, adalah wajib untuk memperoleh kunci pada monitor objek kunci yang disebutkan dalam sintaks di atas. Pada satu masa, hanya 1 utas boleh memperoleh monitor objek kunci. Setiap utas perlu menunggu sehingga utas yang pada masa ini memegang kunci menyelesaikan pelaksanaan dan melepaskannya.

Begitu juga, kata kunci disegerakkan memastikan bahawa pada satu-satu masa, hanya 1 utas akan melaksanakan baris kod dalam blok segerak, yang seterusnya menghalang lebih daripada satu utas daripada merosakkan data yang dikongsi dalam blok.

Andaikan kaedah mengandungi 500 LOC(baris kod), tetapi terdapat hanya 20 baris kod yang memegang bahagian kritikal (CS) kod. Iaitu, 20 baris ini boleh mengubah atau mengubah keadaan objek. Jadi penyegerakan boleh dilakukan pada 20 baris fungsi kod ini untuk mengelakkan sebarang perubahan dalam keadaan objek dan memastikan bahawa utas lain melaksanakan 480 baris lain dalam kaedah tertentu tanpa sebarang selingan.

Contoh Blok Tersegerak dalam Java

Sekarang, mari kita lihat beberapa contoh program pada blok disegerakkan di Java.

Contoh #1

Program Java untuk melaksanakan blok disegerakkan

Kod:

class Testsmple{
void printTestsmple(int n)
{
//start of synchronized block
synchronized(this)
{
System.out.println("The output of synchronized block is: ");
for( int i=1 ; i<=4 ; i++ )
{
System.out.println(n*i);
//exception handling
try
{
Thread.sleep(500);
}
catch(Exception exc)
{
System.out.println(exc) ;
}
}
}
} //end
}
class T1 extends Thread
{
Testsmple t;
T1(Testsmple t)
{
this.t=t;
}
public void run()
{
t.printTestsmple(10);
}
}
class T2 extends Thread
{
Testsmple t;
T2(Testsmple t)
{
this.t=t;
}
public void run()
{
t.printTestsmple(200);
}
}
public class SyncBlockExample
{
public static void main(String args[])
{
// create only one object
Testsmple ob = new Testsmple();
//objects of threads
T1 t1=new T1(ob);
T2 t2=new T2(ob);
//start the threads t1 and t2
t1.start();
t2.start();
}  }

Output:

Blok Disegerakkan di Jawa

Dalam program ini, dua utas t1 dan t2, digunakan di mana setiap satu daripadanya mempunyai kaedah printTestsmple yang memanggil kaedah disegerakkan. Input benang 1 untuk printTestsmple ialah 10, dan input benang 2 ialah 200. Hasilnya, dapat dilihat bahawa output blok disegerakkan benang pertama ialah 10, 20, 30, 40. Pada masa yang sama, hasil blok disegerakkan benang 2 ialah 200, 400, 600, 800. Selain itu, terdapat baris "Output blok disegerakkan ialah:" yang akan dicetak antara hasil setiap utas.

Contoh #2

Program Java untuk melaksanakan blok disegerakkan dengan bantuan menggunakan kelas tanpa nama.

Kod:

class Testsmple{
void printTestsmple(int n)
{
//start of synchronized block
synchronized(this)
{
System.out.println("The output of synchronized block is: ");
for( int i=1 ; i<=4 ; i++ )
{
System.out.println(n*i);
//exception handling
try
{
Thread.sleep(500);
}
catch(Exception exc)
{
System.out.println(exc) ;
}
}
}
} //end
}
public class SyncBlockExample
{
//main method
public static void main(String args[])
{
//create only one object
final Testsmple obj = new Testsmple() ;
//create thread th1
Thread th1=new Thread()
{
public void run()
{
obj.printTestsmple(10) ;
}
}
;
//create thread th2
Thread th2=new Thread()
{
public void run()
{
obj.printTestsmple(200);
}
} ;
th1.start() ;
th2.start() ;
}}

Output:

Blok Disegerakkan di Jawa

Dalam program ini juga, dua utas t1 dan t2, digunakan di mana setiap satu daripadanya mempunyai kaedah printTestsmple yang memanggil kaedah disegerakkan. Input benang 1 untuk printTestsmple ialah 10, dan input benang 2 ialah 200. Hasilnya, dapat dilihat bahawa output blok disegerakkan benang pertama ialah 10, 20, 30, 40. Pada masa yang sama, hasil blok disegerakkan benang 2 ialah 200, 400, 600, 800. Selain itu, terdapat baris "Output blok disegerakkan ialah:" yang akan dicetak antara hasil setiap utas. Satu-satunya perbezaan ialah kehadiran kelas tanpa nama dalam program ini.

Contoh #3

Atur cara Java untuk melaksanakan blok disegerakkan.

import java.util.*;
class ABC
{
String nm = "";
public int cnt = 0;
public void samplename(String stringexample, List<String>li)
{
// In order to change the name at a time, only 1 thread is permitted
synchronized(this)
{
nm = stringexample;
cnt++;
}
li.add(stringexample);
}
}
public class SyncBlockExample
{
//main method
public static void main (String[] args)
{
//create an object for the class ABC
ABC obj = new ABC();
//create a list
List<String>li = new ArrayList<String>();
//call the method using the object created
obj.samplename("Anna Sam", li);
System.out.println(obj.nm);
}
}

Output:

Blok Disegerakkan di Jawa

Dalam program ini, kelas ABC dicipta dengan kaedah yang disegerakkan di dalam nama sampel kaedah. Rentetan "Anna Sam" dihantar sebagai input untuk memanggil nama sampel kaedah. Semasa melaksanakan kod, rentetan “Anna Sam” akan dicetak.

Kelebihan

Beberapa kelebihan diberikan di bawah:

  • Peningkatan prestasi boleh dilakukan jika skop penyegerakan adalah terhad.
  • Segerakkan blok kecil kod untuk mengurangkan kos pengiraan.
  • Fleksibel untuk menggunakan objek lain sebagai kunci.
  • Memandangkan Java ialah bahasa pengaturcaraan berbilang benang, adalah lebih baik untuk mencapai pengecualian bersama pada sumber yang dikongsi.

Atas ialah kandungan terperinci Blok Disegerakkan di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Kelas Bersarang Statik JavaArtikel seterusnya:Kelas Bersarang Statik Java