JavaRush /Java Blog /Random-ID /Rehat kopi #171. Cara menggunakan kata kunci tersinkronis...

Rehat kopi #171. Cara menggunakan kata kunci tersinkronisasi. Penanganan File di Java

Dipublikasikan di grup Random-ID

Cara menggunakan kata kunci tersinkronisasi

Sumber: Medium Hari ini Anda akan mempelajari dalam hal apa dan bagaimana menggunakan kata kunci tersinkronisasi dengan benar dalam bahasa pemrograman Java. Rehat kopi #171.  Cara menggunakan kata kunci tersinkronisasi.  Pemrosesan File di Java - 1Pengubah adalah kata kunci tertentu yang ada di Java yang dengannya kita dapat mengubah karakteristik suatu variabel, metode, atau kelas dan membatasi cakupannya. Bahasa Java memiliki seperangkat pengubah yang cukup besar. Pengubah di Java dibagi menjadi dua jenis - Pengubah Akses dan Pengubah Non -Akses.

Pengubah tanpa akses

Pengubah yang tidak dapat diakses memberikan JVM informasi tentang karakteristik kelas, metode, atau variabel. Ada tujuh jenis pengubah non-akses di Java:
  • terakhir
  • statis
  • abstrak
  • disinkronkan
  • tidak stabil
  • sementara
  • warga asli
Pada artikel ini, kita akan melihat lebih dekat kata kunci tersinkronisasi . Pertama, mari kita tentukan di mana dan kapan menggunakannya.

Dalam kasus apa sinkronisasi digunakan?

Di Java, kata kunci tersinkronisasi digunakan untuk memberikan kontrol akses ke metode atau blok kode. Ketika sebuah thread mencoba mengeksekusi metode atau blok kode yang disinkronkan, thread tersebut harus mendapatkan kunci terlebih dahulu. Setelah Anda menerima kunci, Anda dapat memulai eksekusi. Namun, thread lain yang mencoba menjalankan metode atau blok kode tersinkronisasi yang sama akan diblokir hingga thread pertama melepaskan kuncinya. Hal ini memastikan bahwa hanya satu thread yang dapat mengeksekusi kode pada satu waktu, yang penting untuk menjaga integritas data. Kata kunci tersinkronisasi dapat digunakan dengan metode statis dan non-statis, serta blok kode.
  • Saat digunakan dengan metode statis, semua thread bersaing untuk mendapatkan kunci yang sama. Hal ini dapat memengaruhi kinerja, jadi sebaiknya hindari sinkronisasi metode statis kecuali benar-benar diperlukan.

  • Ketika digunakan dengan metode non-statis, setiap instance kelas akan memiliki kuncinya sendiri, sehingga beberapa thread dapat secara bersamaan mengeksekusi kode yang disinkronkan dari instance yang berbeda. Ini biasanya merupakan pendekatan yang disukai.

  • Saat digunakan dengan blok kode, kunci diperoleh pada objek yang diteruskan ke pernyataan tersinkronisasi . Hal ini memungkinkan beberapa thread untuk secara bersamaan mengeksekusi blok kode yang disinkronkan dari objek yang berbeda.

Dengan demikian, kata kunci tersinkronisasi adalah alat yang ampuh untuk mengontrol akses data secara bersamaan dalam aplikasi Java. Jika digunakan dengan benar, ini dapat membantu memastikan integritas data dan meningkatkan kinerja.

Contoh penggunaan

1. Blok tersinkronisasi

public class Counter {
  private int count = 0;

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

  public void increment() {
    synchronized (this) {
      count++;
    }
  }
}
Ada dua blok kode di sini yang mengakses penghitung. Yang paling sederhana adalah metode get , yang hanya membaca nilainya. Sekilas, metode kenaikan tampaknya berisi satu baris kode. Namun ingat bahwa operasi kenaikan harus membaca nilai saat ini, menambahkan satu ke dalamnya, dan menulis nilai baru kembali ke memori. Dengan kata lain, ada tiga sub-operasi yang ingin kita lakukan tanpa gangguan dari thread lain. Misalnya, menempatkannya di sisi lain atau membuat operasi kenaikan menjadi atom . Saat kita memberi awalan pada dua blok kode dengan kata kunci tersinkronisasi , penting untuk dicatat bahwa kita juga menandainya sebagai tersinkronisasi untuk objek tertentu , seperti yang ditunjukkan dalam contoh kita. Artinya jika kita mempunyai beberapa objek Counter , maka thread yang berbeda dapat memperbarui counter yang berbeda tersebut secara bersamaan. Tetapi dua thread tidak dapat secara bersamaan menjalankan blok tersinkronisasi pada Counter instance yang sama .

2. Metode tersinkronisasi

public class SynchronizedCounter {
    private int c = 0;

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

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

    public synchronized int value() {
        return c;
    }
}
Jika count merupakan turunan dari SynchronizedCounter , sinkronisasi metode ini memiliki dua efek:
  • Pertama, dua panggilan ke metode tersinkronisasi pada objek yang sama tidak dapat disisipkan. Ketika satu thread menjalankan metode tersinkronisasi pada suatu objek, semua thread lain yang memanggil metode tersinkronisasi pada blok objek yang sama akan dijeda hingga thread pertama selesai mengerjakan objek tersebut.

  • Kedua, ketika metode tersinkronisasi keluar, secara otomatis menetapkan nilai ke “terjadi-sebelum” pada setiap panggilan berikutnya ke metode tersinkronisasi pada objek yang sama. Hal ini memastikan bahwa perubahan pada status objek terlihat oleh semua thread.

Ingatlah bahwa mengetahui alasan, bagaimana, dan kapan menggunakan sinkronisasi serta pengubah lainnya membutuhkan pengalaman, dan pengalaman datang seiring berjalannya waktu.

Penanganan File di Java

Sumber: Usemynotes Isi postingan ini tentang pemrosesan file di Java. Anda akan terbiasa dengan operasi pemrosesan file, metode kelas File, dan jenis aliran. Rehat kopi #171.  Cara menggunakan kata kunci tersinkronisasi.  Pemrosesan File di Java - 2Bekerja dengan file merupakan bagian integral dari bahasa pemrograman apa pun. Dengan menggunakan file, suatu program dapat menyimpan data pada perangkat penyimpanan. Melakukan berbagai tindakan pada file, seperti membaca atau menulis, memerlukan pemrosesan file. Pemrosesan file didefinisikan sebagai membaca dari file dan menulis ke file. Untuk membuat objek file dan menangani format file yang berbeda, kita dapat menggunakan kelas File dari paket java.io. Jika kita ingin menggunakan kelas File, kita perlu membuat objek dari kelas File dan menentukan nama atau jalur file. Dengan menggunakan kelas ini, kita dapat mengakses metadata file seperti nama file, ukuran file, izin, jenis file dan sebagainya.
// 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");
}
}
Untuk mengimpor kelas File , Anda juga dapat menggunakan import java.io.File alih-alih import java.io.* . Sekarang mari kita belajar tentang thread karena Java menggunakan thread untuk melakukan operasi input/output (I/O) pada file.

Apa itu utas di Jawa?

Aliran adalah urutan data. Itu juga dapat didefinisikan sebagai urutan byte. Aliran dapat digunakan untuk mewakili sumber masukan atau tujuan. Sumber dan tujuan dapat berupa file pada disk, array, file teks, dan sebagainya. Aliran input membaca atau mengambil data dari sumber, dan aliran output menulis data ke tujuan. Ada dua jenis aliran:

Aliran byte

Aliran Byte digunakan untuk melakukan operasi baca dan tulis pada data byte. Proses pemrosesan file aliran byte didefinisikan sebagai melakukan input menggunakan data byte. Ada banyak kelas yang berhubungan dengan aliran byte, tetapi kelas yang paling umum digunakan adalah FileInputStream dan 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();
 }
}
Dalam contoh di atas, kita membaca data dari file sumber dan menulis data ke tujuan. -1 menunjukkan akhir file. Jadi pembacaan dari file sumber akan berhenti ketika -1 muncul.

Aliran karakter

Character Stream digunakan untuk melakukan operasi baca dan tulis pada data karakter. Proses pengolahan file dengan aliran karakter adalah proses mengeksekusi data input dengan karakter. Ada banyak kelas aliran karakter yang tersedia, namun kelas yang paling umum digunakan meliputi FileWriter dan FileReader . Sekarang mari kita bahas beberapa metode kelas File .

Metode kelas File di Java

dapat membaca()

Metode kelas file ini memeriksa apakah file dapat dibaca dan mengembalikan nilai Boolean, yaitu true atau false .

bisa menulis()

Ini adalah metode kelas file yang memeriksa apakah suatu file dapat ditulis dan mengembalikan nilai boolean, yaitu benar atau salah.

ada()

Ini adalah metode kelas file yang digunakan untuk memeriksa keberadaan file tertentu dan mengembalikan nilai boolean.

buatFile Baru()

Saat kita ingin membuat file kosong baru, gunakan metode kelas file ini. Ini mengembalikan nilai boolean.

menghapus()

Ini adalah metode kelas file yang digunakan untuk menghapus file dan mengembalikan nilai boolean.

dapatkanJalur Absolut()

Metode ini digunakan untuk mengembalikan jalur absolut suatu file. getName() Ini adalah metode yang digunakan untuk mengembalikan nilai string yang merupakan nama file.

daftar()

Ia mengembalikan array string yang mewakili semua file dalam direktori.

panjang()

Metode kelas file ini mengembalikan ukuran file dalam byte.

mkdir()

Ini adalah metode kelas file yang digunakan untuk membuat direktori baru. Mari kita lihat berbagai operasi file yang tersedia di Java dan cara menggunakannya.

Apa operasi file di Java?

Saat memproses file Java, kita dapat melakukan operasi berikut pada file:
  • Membuat file
  • Menulis data ke file
  • Membaca data dari file
  • Menghapus file
  • Mendapatkan informasi tentang suatu file
  • Membuat file
Di Java, kita bisa membuat file menggunakan metode createNewFile() dari kelas File . Metode ini mengembalikan nilai true jika file dibuat, jika tidak, mengembalikan false jika file sudah ada.
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.");
 }
}

Menulis data ke file

Operasi tulis ke file berarti menyimpan data dalam file. Untuk melakukan operasi penulisan pada file, kami menggunakan metode write() bersama dengan kelas FileWriter . Untuk menutup aliran dan mendapatkan sumber daya yang dialokasikan, kita harus menggunakan 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();
   }
}

Membaca dari file

Operasi baca berarti mengakses atau mengambil data yang disimpan dalam file. Untuk melakukan operasi tulis pada file, kita akan menggunakan kelas Scanner bersama dengan metode hasNextLine() dan nextLine() untuk mengambil data dari file. Untuk menutup aliran, kita harus menggunakan 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();
   }
}

Menghapus file

Saat memproses file Java, kita dapat menghapus file menggunakan metode delete() dari kelas File . Tidak perlu menutup file menggunakan fungsi close() karena kelas FileWriter dan Scanner tidak digunakan untuk menghapus file .
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.");
   }
}

Mendapatkan informasi tentang suatu file

Ada beberapa metode di Java untuk mendapatkan informasi tentang suatu file. Mereka telah disebutkan sebelumnya dalam 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());
  }
}
Mari kita lihat cara kerja program Java untuk menentukan apakah suatu bilangan genap atau ganjil menggunakan aliran array byte saat memproses file Java. Untuk menulis program ini, kita akan menggunakan kelas ByteArrayInputStream dari paket java.io. Kelas ini berisi buffer yang digunakan untuk membaca array byte sebagai aliran input. Di bawah ini adalah kode untuk memeriksa apakah angkanya genap atau 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.");
     }
   }
}
Saya harap informasi yang disajikan di sini bermanfaat bagi Anda. Untuk lebih memahami bekerja dengan file di Java, Anda harus mencoba mengimplementasikan sendiri semua file dan metode operasi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION