JavaRush /Blog Jawa /Random-JV /Appreciate wektu karo stream
Andrei
tingkat

Appreciate wektu karo stream

Diterbitake ing grup

PURWAKA. Pakdhe Petya

Dadi, kita pengin ngisi botol banyu. Ana botol lan keran banyune Pakdhe Petya. Pakdhe Petya duwe kran anyar sing dipasang, lan dheweke terus memuji kaendahane. Sadurunge, dheweke mung nggunakake keran lawas sing mampet, mula garis ing botol kasebut gedhe banget. Sak wise rada ngomel, keprungu swara isi banyu saka arah tumpahan, 2 menit botole isih tahap ngisi, antrian sing biasane wis ngumpul nang mburiku, lan gambaran sing ana ing sirahku yaiku kepriwe Pakdhe. Petya mung milih molekul H2O sing paling apik ing botol kita. Pakdhe Petya, sing dilatih kanthi urip, nenangake wong sing agresif lan janji bakal rampung kanthi cepet. Sawise rampung karo botol, dheweke njupuk sing sabanjure lan nguripake tekanan biasa, sing ora nuduhake kabeh kemampuan tunyuk anyar. Wong ora seneng... Ngapresiasi wektu karo stream - 1

Teori

Multithreading minangka kemampuan platform kanggo nggawe macem-macem utas ing siji proses. Nggawe lan nglakokake thread luwih gampang tinimbang nggawe proses, dadi yen perlu kanggo ngleksanakake sawetara tumindak podo ing siji program, Utas tambahan digunakake. Ing JVM, program apa wae mlaku ing utas utama, lan liyane diluncurake. Ing proses sing padha, benang bisa ijol-ijolan data karo siji liyane. Nalika miwiti utas anyar, sampeyan bisa ngumumake minangka utas pangguna nggunakake metode kasebut
setDaemon(true);
Utas kuwi bakal mati kanthi otomatis yen ora ana Utas mlaku liyane. Utas nduweni prioritas kerja (pilihan prioritas ora njamin yen utas prioritas paling dhuwur bakal rampung luwih cepet tinimbang utas prioritas sing luwih murah).
  • MIN_PRIORITY
  • NORM_PRIORITY (standar)
  • MAX_PRIORITY
Cara dhasar nalika nggarap stream:
  • run()- executes thread
  • start()- miwiti thread
  • getName()– ngasilake jeneng thread
  • setName()– nemtokake jeneng stream
  • wait()– metode warisan, utas ngenteni cara diarani notify()saka utas liyane
  • notify()- cara sing diwarisake, nerusake thread sing wis mandheg sadurunge
  • notifyAll()– cara warisan, nerusake sadurunge mandegake Utas
  • sleep()– ngaso stream kanggo wektu tartamtu
  • join()- ngenteni thread rampung
  • interrupt()- ngganggu eksekusi thread
Cara liyane bisa ditemokake ing kene. Wektu kanggo mikir babagan utas anyar yen program sampeyan duwe:
  • Akses jaringan
  • Akses sistem file
  • GUI

Kelas thread

Utas ing basa Jawa digambarake minangka kelas Threadlan turunane. Conto ing ngisor iki minangka implementasine prasaja saka kelas stream.
import static java.lang.System.out;

public class ExampleThread extends Thread{

    public static void main(String[] args) {
        out.println("Основной поток");
        new ExampleThread().start();
    }

    @Override
    public void run() {
        out.println("Новый поток");
    }
}
Akibaté, kita entuk
Основной поток
Новый поток
Ing kene kita nggawe kelas lan nggawe turunan kelas Thread, sawise nulis metode utama () kanggo miwiti utas utama lan ngilangi metode run()kelas Thread. Saiki, sawise nggawe conto kelas kita lan nglakokake metode sing diwarisake, start()kita bakal mbukak thread anyar sing kabeh sing diterangake ing awak metode kasebut bakal ditindakake run(). Iku muni rumit, nanging katon ing conto kode kabeh kudu cetha.

Antarmuka Runnable

Oracle uga nyaranake ngleksanakake antarmuka kanggo miwiti thread anyar Runnable, kang menehi kita luwih keluwesan desain saka mung warisan kasedhiya ing conto sadurungé (yen katon ing sumber saka kelas Threadsampeyan bisa ndeleng sing uga ngleksanakake antarmuka Runnable). Ayo nggunakake cara sing disaranake kanggo nggawe thread anyar.
import static java.lang.System.out;

public class ExampleRunnable implements Runnable {

    public static void main(String[] args) {
        out.println("Основной поток");
        new Thread(new ExampleRunnable()).start();
    }

    @Override
    public void run() {
        out.println("Новый поток");
    }
}
Akibaté, kita entuk
Основной поток
Новый поток
Conto banget padha, amarga Nalika nulis kode, kita kudu ngetrapake cara abstrak run()sing diterangake ing antarmuka Runnable. Ngluncurake thread anyar rada beda. Kita nggawe conto kelas Threadkanthi menehi referensi menyang conto implementasi antarmuka minangka parameter Runnable. Pendekatan iki sing ngidini sampeyan nggawe utas anyar tanpa langsung marisi kelas Thread.

Operasi dawa

Conto ing ngisor iki bakal nuduhake kanthi jelas keuntungan nggunakake pirang-pirang benang. Ayo dadi ngomong kita duwe tugas prasaja sing mbutuhake sawetara petungan dhowo, sadurunge artikel iki kita bakal wis ditanggulangi ing cara, main()mbok menawa bejat mudhun menyang cara kapisah kanggo ease saka pemahaman, malah kelas, nanging inti bakal padha. Kabeh operasi bakal ditindakake kanthi urutan siji-sijine. Ayo simulasi petungan bobot abot lan ngukur wektu eksekusi.
public class ComputeClass {

    public static void main(String[] args) {
        // Узнаем стартовое время программы
        long startTime = System.currentTimeMillis();

        // Определяем долгосрочные операции
        for(double i = 0; i < 999999999; i++){
        }
        System.out.println("complete 1");
        for(double i = 0; i < 999999999; i++){
        }
        System.out.println("complete 2");
        for(double i = 0; i < 999999999; i++){
        }
        System.out.println("complete 3");

        //Вычисляем и выводим время выполнения программы
        long timeSpent = System.currentTimeMillis() - startTime;
        System.out.println("программа выполнялась " + timeSpent + " миллисекунд");
    }
}
Akibaté, kita entuk
complete 1
complete 2
complete 3
программа выполнялась 9885 миллисекунд
Wektu eksekusi ninggalake akeh sing dikarepake, lan kabeh wektu iki kita ndeleng layar output kosong, lan kahanan kasebut meh padha karo crita babagan Pakdhe Petya, mung saiki ing peran kita, para pangembang, ora entuk manfaat saka kabeh kemampuan piranti modern. Kita bakal nambah.
public class ComputeClass {

    public static void main(String[] args) {
        // Узнаем стартовое время программы
        long startTime = System.currentTimeMillis();

        // Определяем долгосрочные операции
        new MyThread(1).start();
        new MyThread(2).start();
        for(double i = 0; i < 999999999; i++){
        }
        System.out.println("complete 3");

        //Вычисляем и выводим время выполнения программы
        long timeSpent = System.currentTimeMillis() - startTime;
        System.out.println("программа выполнялась " + timeSpent + " миллисекунд");
    }
}

class MyThread extends Thread{
int n;

MyThread(int n){
    this.n = n;
}

    @Override
    public void run() {
        for(double i = 0; i < 999999999; i++){
        }
        System.out.println("complete " + n);
    }
}
Akibaté, kita entuk
complete 1
complete 2
complete 3
программа выполнялась 3466 миллисекунд
Wektu mlaku wis suda banget (efek iki bisa uga ora bisa digayuh utawa bisa uga nambah wektu eksekusi ing prosesor sing ora ndhukung multithreading). Wigati dicathet yen benang bisa rampung, lan yen pangembang mbutuhake prediktabilitas tumindak, dheweke kudu ngetrapake kanthi mandiri kanggo kasus tartamtu.

Kelompok thread

Utas ing basa Jawa bisa digabung dadi klompok, kelas digunakake kanggo iki ThreadGroup. Klompok bisa kalebu benang tunggal lan kabeh klompok. Iki bisa dadi trep yen sampeyan kudu ngganggu aliran sing gegandhengan, contone, karo jaringan nalika sambungan ilang. Sampeyan bisa maca liyane babagan grup ing kene, muga-muga topik kasebut wis dadi luwih jelas kanggo sampeyan lan pangguna sampeyan bakal seneng.
Ngapresiasi wektu karo stream - 2
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION