JavaRush /Blog Jawa /Random-JV /Ngopi #165. Paket ing Jawa. Cara aman thread kanggo pamul...

Ngopi #165. Paket ing Jawa. Cara aman thread kanggo pamula

Diterbitake ing grup

Paket Jawa

Sumber: Usemynotes Kiriman iki bakal mbantu sampeyan luwih ngerti paket ing Jawa, ngerti tujuane lan cara ngetrapake. Ngopi #165.  Paket ing Jawa.  Cara aman kanggo pamula - 1

Apa paket ing Jawa

Paket ing Jawa minangka cara kanggo nglumpukake klompok kelas, antarmuka, lan subpaket. Paket digunakake kanggo nggawe klompok kelas sing gegandhengan, antarmuka, enumerasi, lan liya-liyane. Subpaket yaiku paket sing ana ing paket liyane. Ora diimpor kanthi gawan, nanging sampeyan bisa ngimpor kanthi manual yen perlu. Spesifikasi akses ora diwenehake kanggo anggota individu saka subpaket; padha dianggep minangka paket sing kapisah.

Sawetara jinis paket ing Jawa:

  • java.lang - dilengkapi karo Jawa minangka standar.
  • java.io - ngemot kelas, metode lan unsur liyane sing ana gandhengane karo input / output.

Kenapa paket dibutuhake?

  • Kanggo ngindhari konflik jeneng.
  • Kanggo nyedhiyani akses kontrol.
  • Kanggo entuk enkapsulasi data.

Carane nggawe paket ing Jawa?

Ayo nggawe paket sing diarani komputer . Biasane jeneng paket ditulis nganggo huruf cilik. Iki ditindakake mung kanggo ngindhari konflik jeneng karo jeneng kelas. Kita uga bakal nggawe antarmuka sing diarani Pluggable , sing bakal ana ing paket komputer .
package computer;

interface Pluggable {
   public void pluggedIn();
   public void pluggedOut();
}
Saiki kita bakal nggawe kelas sing diarani PenDrive sing bakal ngetrapake antarmuka ing ndhuwur.
package computer;

public class PenDrive implements Pluggable {

   int storage = 64;

   public void pluggedIn () {
     System.out.println("Pen Drive is connected");
   }

   public void pluggedOut () {
     System.out.println("Pen Drive is removed");
   }

   public int storage() {
     return storage;
   }

   public static void main(String args[]) {
     PenDrive p = new PenDrive ();
     p.pluggedIn();
     System.out.println("Pen Drive Storage: " + p.storage());
     p.pluggedOut();
   }
}

Kepiye carane nggawe hirarki paket ing Jawa?

Nalika mbentuk hirarki, paket ing Jawa dijenengi ing urutan mbalikke. Iki nggawe padha banget karo direktori utawa folder. Kaya ing komputer pribadi, ing ngendi siji folder bisa ngemot siji utawa luwih subfolder, uga ditrapake kanggo paket ing Jawa. Ayo goleki paket sing jenenge Asia.India.Kolkata . Iki kabeh folder sing wis ana, nanging yen sampeyan nganggep geografi, jelas yen Kalkuta ana ing India, lan India ana ing Asia. Tujuan utama hierarki yaiku nggawe kelas luwih gampang ditemokake.

Jinis paket ing Jawa

Paket Built-in

Paket sing dibangun yaiku paket sing kalebu akeh kelas sing kalebu ing API Java. Paket kasebut kalebu:
  • java.util - Paket iki ngemot sawetara kelas sarana sing digunakake kanggo ngleksanakake struktur data kayata dhaptar link, set, lan liya-liyane. Uga ndhukung operasi tanggal lan wektu lan liya-liyane.
  • java.net - Isine kelas sing digunakake kanggo operasi jaringan.

Paket sing ditemtokake pangguna

Paket sing ditetepake dening pangguna diarani paket pangguna. Pangguna bisa nggawe paket kanthi manual lan duwe akeh kelas sing dikarepake.

Carane ngakses paket saka paket liyane?

Sampeyan bisa ngakses paket saka paket liyane kanthi telung cara sing gampang:
  • Nggunakake tanda bintang ing statement ngimpor
Tanda bintang ( * ) digunakake kanggo makili "kabeh barang" ing basa Jawa. Nggunakake, kita bisa ngimpor kabeh sing ana ing subpaket paket. Conto: Coba paket sing jenenge alat . Yen kita pengin ngimpor kabeh sing ana ing paket iki, kita kudu nggunakake pernyataan impor kaya:
import tools.*;
  • Nggunakake import package.ClassName;
Nyebutake jeneng kelas ing paket minangka cara sing efektif kanggo ngimpor mung kelas sing sampeyan butuhake menyang program sampeyan, saengga ora ngimpor kelas sing ora perlu. Conto: Coba paket sing jenenge buku . Yen kita mung pengin ngimpor kelas utawa antarmuka tartamtu saka iku (kita bakal ndeleng kelas Pages ), banjur kita bisa ngimpor mung nggunakake:
import book.Pages;
  • Nggunakake jeneng lengkap
Ana cara kanggo langsung nggunakake paket Jawa utawa kelas kanthi nggunakake jeneng sing qualified. Kanthi cara iki sampeyan ora kudu ngimpor paket kasebut lan bisa digunakake langsung ing program kasebut. Tuladha:
java.awt.List aSimpleList = new java.awt.List();

Ukuran batch standar ing Jawa

Kanthi gawan, Java ngimpor paket java.lang . Wis akeh kelas sing umum digunakake ing program Jawa prasaja kayata String , Integer lan liya-liyane. Salah sawijining kelas sing paling penting yaiku kelas Obyek , sing uga ditemokake ing paket java.lang . Ukuran paket iki adhedhasar komponen: 8 antarmuka, 37 kelas, 3 enum, 27 pengecualian, 23 jinis kesalahan, lan 5 jinis anotasi.

Metode Java sing Aman Utas kanggo Pamula

Sumber: Sedheng Nggunakake artikel iki, sampeyan bisa sinau babagan cara kerja thread aman ing Jawa. Ngopi #165.  Paket ing Jawa.  Cara aman kanggo pamula - 2Aku wis ketemu sing akeh junior / pangembang Jawa tengah misunderstood carane thread-aman cara kudu bisa ing proyek nyata. Lan amarga kita biasane kerja ing lingkungan multi-threaded, panggunaan sing bener penting banget. Cara aman thread minangka cara sing bisa diarani saka pirang-pirang utas bebarengan tanpa mengaruhi negara data siji liyane. Pangerten sing ora cukup babagan konsep iki nyebabake bug sing angel ditemokake lan didandani. Kanggo ngindhari kesalahan kasebut, ayo goleki conto.

Tuladha #1:

public static int countLetters(String input) {
    int counter = 0;

    for (Character c : input.toCharArray()) {
        if (Character.isAlphabetic(c)) {
            counter++;
        }
    }

    return counter;
}
  • Cara countLetters statis, ngasilake nilai int lan nampa parameter string minangka input.
  • Counter variabel primitif digawe ing metode kasebut, banjur puteran puteran liwat karakter string input lan nambah counter variabel saben karakter huruf ditemoni.
Apa thread metode iki aman? Akeh pangembang ujar ora, amarga ing kasus iki, kita duwe operasi tambahan sing ora aman. Ayo dadi tokoh metu. Ing model memori Jawa kita duwe tumpukan lan tumpukan. Saben utas duwe tumpukan dhewe, lan kabeh benang nuduhake tumpukan sing padha. Ing babagan iki, data tumpukan tansah aman, nanging data tumpukan ora. Tumpukan nyimpen primitif lan referensi obyek. Tumpukan kasebut ngemot obyek kasebut dhewe. Iki tegese ing conto kode iki, saben thread nyimpen counter variabel dhewe ing tumpukan lan ora duwe pengaruh ing data thread liyane, supaya cara aman thread . Elinga yen nilai String input uga minangka obyek, nanging String lan bungkus primitif ( Integer , Long , Double , Boolean lan liya-liyane) aman kanggo benang amarga ora bisa diganti.

Tuladha #2:

public static int countLetters2(String input) {
    List<Character> listCounter = new ArrayList<>();

    for (Character c : input.toCharArray()) {
        if (Character.isAlphabetic(c)) {
            listCounter.add(c);
        }
    }

    return listCounter.size();
}
Kode iki nggunakake logika sing padha karo conto pisanan, nanging nggunakake obyek List tinimbang variabel int primitif . Saka bagean sadurunge kita ngerti yen obyek ing Jawa disimpen ing tumpukan lan List minangka obyek. Kita uga ngerti yen tumpukan nyimpen referensi kanggo obyek ing tumpukan. Ing conto #2, saben thread nggawe obyek ArrayList anyar : lan variabel listCounter nyimpen referensi kanggo obyek ing tumpukan, supaya ora ana thread liyane sing bisa ngganti obyek kasebut.
List<Character> listCounter = new ArrayList<>();
Iki tegese cara iki aman.

Tuladha #3:

public class CounterUtil { // singleton

    List<Character> listCounter = new ArrayList<>();

    public int countLetters3(String input) {
        for (Character c : input.toCharArray()) {
            if (Character.isAlphabetic(c)) {
                listCounter.add(c);
            }
        }

        return listCounter.size();
    }
}
Ing conto iki, kita duwe singleton (iki penting) kelas CounterUtil karo variabel global listCounter . Variabel iki digawe bebarengan karo conto singleton. Nalika pirang-pirang benang nelpon metode countChars3 , kabeh padha nggunakake variabel global listCounter sing padha , sing nyimpen referensi kanggo obyek sing padha ing tumpukan, lan benang ing kana bakal saling pengaruh. Mulane, kita bisa nyimpulake yen metode iki ora aman. Lan sanajan kita ngganti List<Character> listCounter menyang variabel primitif int counter , uga ora bakal aman thread amarga kabeh thread bakal nggunakake variabel primitif sing padha.

Tuladha pungkasan:

public static int countLetters4(List<Character> inputList) {
    List<Character> listCounter = new ArrayList<>();

    for (Character c : inputList) {
        if (Character.isAlphabetic(c)) {
            listCounter.add(c);
        }
    }

    return listCounter.size();
}
Cara countLetters4 nampa dhaptar karakter tinimbang parameter String . Ing kene kita ora bisa njamin yen metode iki aman. Kenging punapa? Amarga kita ora bisa yakin kepiye pangembang nggunakake metode iki. Yen thread liyane saka njaba ngganti data ing inputList bebarengan karo cara counterLetters4 kita , bisa mengaruhi asil pungkasan.

Kesimpulan

Kita wis mung katon ing papat conto, lan padha ora nutupi kabeh aspèk safety thread ing proyèk Jawa, nanging iku panggonan sing apik kanggo miwiti. Yen sampeyan ndeleng metode ing kode sampeyan, takon dhewe, "Apa thread metode iki aman?" Lan ora suwe sampeyan bakal ngerti jawaban kasebut kanthi jelas.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION