JavaRush /Blog Jawa /Random-JV /Ngopi #171. Cara nggunakake tembung kunci sing disinkrona...

Ngopi #171. Cara nggunakake tembung kunci sing disinkronake. Penanganan File ing Jawa

Diterbitake ing grup

Cara nggunakake tembung kunci sing disinkronake

Sumber: Medium Dina iki sampeyan bakal sinau babagan kasus apa lan carane nggunakake tembung kunci sing disinkronake kanthi bener ing basa pamrograman Jawa. Ngopi #171.  Cara nggunakake tembung kunci sing disinkronake.  Pangolahan File ing Jawa - 1Modifiers minangka tembung kunci tartamtu sing ana ing Jawa kanthi bantuan sing bisa ngowahi karakteristik variabel, metode utawa kelas lan mbatesi ruang lingkup. Basa Jawa nduweni ragam pangowahan kang cukup akeh. Modifiers ing Jawa dipérang dadi rong jinis - Modifiers Akses lan Modifiers Non -Akses.

Modifiers tanpa akses

Modifiers sing ora bisa diakses nyedhiyakake informasi JVM babagan karakteristik kelas, metode, utawa variabel. Ana pitung jinis modifikasi non-akses ing Jawa:
  • pungkasan
  • statis
  • abstrak
  • diselarasake
  • molah malih
  • sementara
  • pribumi
Ing artikel iki, kita bakal nliti tembung kunci sing disinkronake . Pisanan, ayo nemtokake ngendi lan kapan nggunakake.

Ing kasus apa sing disinkronake digunakake?

Ing Jawa, tembung kunci sing disinkronake digunakake kanggo nyedhiyakake kontrol akses menyang metode utawa blok kode. Nalika thread nyoba nglakokake cara sing disinkronake utawa blok kode, mula kudu entuk kunci. Sawise sampeyan nampa kunci, sampeyan bisa miwiti eksekusi. Nanging, utas liyane sing nyoba nglakokake metode sing disinkronake utawa blok kode sing padha bakal diblokir nganti utas pisanan ngeculake kunci kasebut. Iki mesthekake yen mung siji utas bisa nglakokake kode sekaligus, sing penting kanggo njaga integritas data. Tembung kunci sing disinkronake bisa digunakake kanthi cara statis lan non-statis, uga blok kode.
  • Yen digunakake kanthi cara statis, kabeh benang saingan kanggo kunci sing padha. Iki bisa nyebabake kinerja, mula luwih becik supaya ora nyinkronake metode statis kajaba pancen perlu.

  • Nalika digunakake karo cara non-statis, saben instance saka kelas bakal duwe kunci dhewe, supaya macem-macem Utas bisa bebarengan nglakokaké kode diselarasake saka macem-macem kedadean. Iki biasane pendekatan sing disenengi.

  • Nalika digunakake karo pamblokiran kode, kunci dipikolehi ing obyek sing diterusake menyang statement sing disinkronake . Iki ngidini pirang-pirang utas kanggo nglakokake blok kode sing disinkronake kanthi bebarengan saka obyek sing beda-beda.

Dadi, tembung kunci sing disinkronake minangka alat sing kuat kanggo ngontrol akses data bebarengan ing aplikasi Java. Yen digunakake kanthi bener, bisa mbantu njamin integritas data lan ningkatake kinerja.

Conto nggunakake

1. Blok sing disinkronake

public class Counter {
  private int count = 0;

  public int getCount() {
    synchronized (this) {
      return count;
    }
  }

  public void increment() {
    synchronized (this) {
      count++;
    }
  }
}
Ana rong blok kode ing kene sing ngakses counter. Sing paling gampang yaiku metode get , sing mung maca nilai kasebut. Sepisanan, metode increment katon ngemot siji baris kode. Nanging elinga yen operasi nambah kudu maca Nilai saiki, nambah siji menyang, lan nulis Nilai anyar bali menyang memori. Ing tembung liyane, ana telung sub-operasi sing pengin ditindakake tanpa gangguan saka benang liyane. Contone, dilebokake ing sisih liyane utawa nggawe operasi increment atom . Nalika kita ater-ater rong blok kode nganggo tembung kunci sing disinkronake , penting kanggo dicathet yen kita uga menehi tandha minangka disinkronake kanggo obyek tartamtu , kaya sing ditampilake ing conto kita. Iki tegese yen kita duwe macem-macem obyek Counter , banjur thread beda bisa nganyari counter beda ing wektu sing padha. Nanging loro Utas ora bisa bebarengan mbukak pamblokiran diselarasake ing conto Counter padha .

2. Metode sinkronisasi

public class SynchronizedCounter {
    private int c = 0;

    public synchronized void increment() {
        c++;
    }

    public synchronized void decrement() {
        c--;
    }

    public synchronized int value() {
        return c;
    }
}
Yen count minangka conto saka SynchronizedCounter , banjur nyinkronake metode kasebut duwe rong efek:
  • Kaping pisanan, rong panggilan menyang cara sing disinkronake ing obyek sing padha ora bisa interleave. Nalika siji utas nglakokaké cara sing disinkronake ing obyek, kabeh utas liyane sing nyebut cara sing disinkronake ing blok obyek sing padha ngaso nganti utas pisanan rampung nggarap obyek kasebut.

  • Kapindho, nalika cara sing disinkronake metu, kanthi otomatis nyetel nilai "kedadeyan-sadurunge" ing sembarang telpon sakteruse menyang cara sing disinkronake ing obyek sing padha. Iki mesthekake yen owah-owahan ing status obyek katon kanggo kabeh thread.

Elinga yen ngerti apa, carane lan nalika nggunakake sinkronisasi uga modifiers liyane nerangake karo pengalaman, lan pengalaman teka karo wektu.

Penanganan File ing Jawa

Sumber: Usemynotes Isi postingan iki yaiku babagan pangolahan file ing basa Jawa. Sampeyan bakal kenal karo operasi pangolahan file, metode kelas File, lan jinis aliran. Ngopi #171.  Cara nggunakake tembung kunci sing disinkronake.  Pangolahan File ing Jawa - 2Nggarap file minangka bagean integral saka basa pamrograman apa wae. Nggunakake file, program bisa nyimpen data ing piranti panyimpenan. Nindakake macem-macem tumindak ing file, kayata maca utawa nulis, mbutuhake proses file. Pangolahan file ditetepake minangka maca saka file lan nulis menyang file. Kanggo nggawe obyek file lan nangani macem-macem format file, kita bisa nggunakake kelas File saka paket java.io. Yen kita pengin nggunakake kelas File, kita kudu nggawe obyek saka kelas File lan nemtokake jeneng berkas utawa path. Nggunakake kelas iki, kita bisa ngakses metadata file kayata jeneng file, ukuran file, ijin, jinis file lan liya-liyane.
// importing all the classes of java.io
import java.io.*;
class FileHandle {
    public static void main(String[] arr) {
       // an object of File class is created.
       File f=new File("demo.txt");
}
}
Kanggo ngimpor kelas File , sampeyan uga bisa nggunakake import java.io.File tinimbang import java.io.* . Saiki ayo sinau babagan benang amarga Jawa nggunakake benang kanggo nindakake operasi input/output (I/O) ing file.

Ukara ing basa Jawa iku apa?

Stream minangka urutan data. Bisa uga ditetepake minangka urutan bait. Stream bisa digunakake kanggo makili sumber input utawa tujuan. Sumber lan tujuan bisa dadi file ing disk, array, file teks, lan liya-liyane. Aliran input maca utawa njupuk data saka sumber, lan stream output nulis data menyang tujuan. Ana rong jinis aliran:

Aliran byte

A Byte Stream digunakake kanggo nindakake operasi maca lan nulis ing data bait. Proses ngolah file stream byte ditetepake minangka nindakake input nggunakake data byte. Ana akeh kelas sing ana gandhengane karo stream byte, nanging kelas sing paling umum digunakake yaiku FileInputStream lan FileOutputStream .
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
   FileInputStream fin=new FileInputStream("source_file.txt");
   FileOutputStream fout=new FileOutputStream("destination_file.txt");
   int character;
   while((character=fin.read())!=-1)
   {
      System.out.print((char)character);
      // writing to destination file
      fout.write((char)character);
   }
   // closing source_file.txt
   fin.close();
   // closing destination_file.txt
   fout.close();
 }
}
Ing conto ing ndhuwur, kita maca data saka file sumber lan nulis data menyang tujuan. -1 nuduhake mburi file. Dadi maca saka file sumber bakal mandheg nalika -1 katon.

Aliran karakter

Character Stream digunakake kanggo nindakake operasi maca lan nulis ing data karakter. Proses ngolah file kanthi aliran karakter yaiku proses ngeksekusi data input kanthi karakter. Ana akeh kelas stream karakter kasedhiya, nanging kelas sing paling umum digunakake kalebu FileWriter lan FileReader . Saiki ayo ngrembug sawetara metode kelas File .

Metode kelas File ing Jawa

bisaBaca()

Cara kelas file iki mriksa apa file bisa diwaca lan ngasilake nilai Boolean, yaiku bener utawa salah .

bisa Nulis()

Iki minangka metode kelas file sing mriksa manawa file bisa ditulis lan ngasilake nilai boolean, yaiku bener utawa salah.

ana ()

Iki minangka metode kelas file sing digunakake kanggo mriksa anane file sing diwenehake lan ngasilake nilai boolean.

createNewFile()

Nalika kita pengin nggawe file kosong anyar, gunakake metode kelas file iki. Iki ngasilake nilai boolean.

mbusak ()

Iki minangka metode kelas file sing digunakake kanggo mbusak file lan ngasilake nilai boolean.

getAbsolutePath()

Cara iki digunakake kanggo ngasilake path absolut saka file. getName () Iki minangka cara sing digunakake kanggo ngasilake nilai senar yaiku jeneng file.

daftar()

Iki ngasilake array strings sing makili kabeh file ing direktori.

dawa ()

Cara kelas file iki ngasilake ukuran file ing bita.

mkdir()

Iki minangka metode kelas file sing digunakake kanggo nggawe direktori anyar. Ayo goleki macem-macem operasi file sing kasedhiya ing Jawa lan cara nggunakake.

Apa operasi file ing Jawa?

Nalika ngolah file Java, kita bisa nindakake operasi ing ngisor iki ing file:
  • Nggawe file
  • Nulis data menyang file
  • Maca data saka file
  • Mbusak file
  • Njupuk informasi babagan file
  • Nggawe file
Ing Jawa, kita bisa nggawe file nggunakake metode createNewFile() saka kelas File . Cara iki ngasilake bener yen file digawe, digunakake bali palsu yen file wis ana.
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
   // an object of file class
   File f=new File("demo.txt");
   // creating a new file
   Boolean result=f.createNewFile();
   if(result)
      System.out.print(f+" created successfully.");
   else
      System.out.format("%s","File cannot be created due to some error.");
 }
}

Nulis data menyang file

Operasi nulis menyang file tegese nyimpen data ing file. Kanggo nindakake operasi nulis ing file, kita nggunakake cara nulis () bebarengan karo kelas FileWriter . Kanggo nutup stream lan entuk sumber daya sing diparengake, kita kudu nggunakake metode close () .
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
     // creating a new file and writing data to a file
     FileWriter fw=new FileWriter("demo.txt");
     String s="Welcome, this is tutorial of Java File Handling.";
     fw.write(s);
     // closing a file
     fw.close();
   }
}

Maca saka file

Operasi maca tegese ngakses utawa njupuk data sing disimpen ing file. Kanggo nindakake operasi nulis ing file, kita bakal nggunakake kelas Scanner bebarengan karo hasNextLine () lan nextLine () cara kanggo njupuk data saka file. Kanggo nutup stream, kita kudu nggunakake metode close () .
import java.io.*;
import java.util.Scanner;
public class FileHandle{
   public static void main(String []arr) throws IOException{
     File f=new File("demo.txt");
     Scanner sc=new Scanner(f);
     while(sc.hasNextLine())
     {
       String str=sc.nextLine();
       System.out.println(str);
     }
     // closing a file
     sc.close();
   }
}

Mbusak file

Nalika ngolah file Java, kita bisa mbusak file kanthi nggunakake metode delete () saka kelas File . Ora perlu nutup file kanthi nggunakake fungsi close () amarga kelas FileWriter lan Scanner ora digunakake kanggo mbusak file kasebut .
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
      File f=new File("demo.txt");
      Boolean result=f.delete();
      if(result)
         System.out.print(f+" deleted successfully.");
      else
         System.out.format("%s","File cannot be deleted due to some error.");
   }
}

Njupuk informasi babagan file

Ana sawetara cara ing Jawa kanggo entuk informasi babagan file. Dheweke wis kasebut sadurunge ing metode kelas file.
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
     File file=new File("demo.txt");
     file.createNewFile();
     String filename=file.getName();
     System.out.println("File Name is "+filename);
     System.out.println("Absolute path of "+filename+" : "+file.getAbsolutePath());
     System.out.print("length of "+filename+" : "+file.length());
     System.out.println("Is "+filename+" readable? "+file.canRead());
     System.out.println("Is "+filename+" writable? "+file.canWrite());
     System.out.println("Is "+filename+" exists? "+file.exists());
  }
}
Ayo goleki carane program Java bisa digunakake kanggo nemtokake manawa nomer kasebut genap utawa ganjil nggunakake stream array byte nalika ngolah file Java. Kanggo nulis program iki, kita bakal nggunakake kelas ByteArrayInputStream saka paket java.io. Kelas iki ngemot buffer sing digunakake kanggo maca array byte minangka stream input. Ing ngisor iki kode kanggo mriksa yen nomer genap utawa ganjil.
import java.io.*;
public class FileHandle{
   public static void main(String []arr) throws IOException{
     byte []buffer={10,40,81,23,32,100,57};
     ByteArrayInputStream by=new ByteArrayInputStream(buffer);

     int character=0;
     while((character=by.read())!=-1)
     {
        int number=character;
        if(number%2==0)
          System.out.println(number+" is an even number.");
        else
          System.out.println(number+" is an odd number.");
     }
   }
}
Muga-muga informasi sing diwenehake ing kene migunani kanggo sampeyan. Kanggo luwih ngerti nggarap file ing Jawa, sampeyan kudu nyoba ngleksanakake kabeh file lan cara operasi dhewe.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION