Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Tutorial Multithreading di Java dengan Program &Contoh


Aplikasi apapun dapat memiliki banyak proses (instance). Masing-masing proses ini dapat ditetapkan sebagai satu utas atau beberapa utas. Kita akan melihat dalam tutorial ini bagaimana melakukan banyak tugas secara bersamaan dan juga mempelajari lebih lanjut tentang utas dan sinkronisasi antar utas.

Dalam tutorial Multithreading di Java ini, kita akan belajar:

Apa itu Utas Tunggal?

Satu utas di Java pada dasarnya adalah unit pemrosesan yang ringan dan terkecil. Java menggunakan utas dengan menggunakan "Kelas Utas".

Ada dua jenis utas – utas pengguna dan utas daemon (utas daemon digunakan saat kita ingin membersihkan aplikasi dan digunakan di latar belakang).

Saat aplikasi pertama kali dimulai, utas pengguna dibuat. Posting itu, kita bisa membuat banyak user thread dan daemon thread.

Contoh Utas Tunggal:

package demotest;

public class GuruThread
{
       public static void main(String[] args) {
              System.out.println("Single Thread");
       }
}

Keuntungan utas tunggal:

Apa itu Multithreading di Java?

Multi-utas di Jawa adalah proses mengeksekusi dua atau lebih utas secara bersamaan untuk pemanfaatan CPU secara maksimal. Aplikasi multithreaded mengeksekusi dua atau lebih thread yang dijalankan secara bersamaan. Oleh karena itu, ini juga dikenal sebagai Concurrency di Jawa. Setiap utas berjalan sejajar satu sama lain. Beberapa utas tidak mengalokasikan area memori terpisah, sehingga menghemat memori. Selain itu, peralihan konteks antar utas membutuhkan waktu lebih sedikit.

Contoh Multi-utas:

package demotest;
public class GuruThread1 implements Runnable
{
       public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

Keuntungan multiutas:

Siklus Hidup Thread di Java

Siklus Hidup utas:

Siklus Hidup Utas di Java

Ada berbagai tahapan siklus hidup thread seperti yang ditunjukkan pada diagram di atas:

  1. Baru
  2. Dapat dijalankan
  3. Berlari
  4. Menunggu
  5. Mati
  1. Baru: Pada fase ini, utas dibuat menggunakan kelas “Kelas utas”. Tetap dalam status ini hingga program dimulai benang. Ini juga dikenal sebagai utas lahir.
  2. Dapat dijalankan: Di halaman ini, instance dari thread dipanggil dengan metode start. Kontrol utas diberikan kepada penjadwal untuk menyelesaikan eksekusi. Itu tergantung pada penjadwal, apakah akan menjalankan utas.
  3. Berlari: Ketika utas mulai dieksekusi, maka status diubah menjadi status "berjalan". Penjadwal memilih satu utas dari kumpulan utas, dan mulai dijalankan di aplikasi.
  4. Menunggu: Ini adalah keadaan ketika sebuah utas harus menunggu. Karena ada banyak utas yang berjalan di aplikasi, ada kebutuhan untuk sinkronisasi antar utas. Oleh karena itu, satu utas harus menunggu, sampai utas lainnya dieksekusi. Oleh karena itu, keadaan ini disebut sebagai keadaan menunggu.
  5. Mati: Ini adalah keadaan ketika utas dihentikan. Utas dalam keadaan berjalan dan segera setelah selesai diproses, utas dalam keadaan "mati".


Beberapa metode thread yang umum digunakan adalah:


Metode

Deskripsi
start() Metode ini memulai eksekusi thread dan JVM memanggil metode run() pada thread.
Tidur(int milidetik) Metode ini membuat utas tidur sehingga eksekusi utas akan berhenti selama milidetik yang disediakan dan setelah itu, utas mulai dieksekusi lagi. Ini membantu dalam sinkronisasi utas.
getName() Ini mengembalikan nama utas.
setPriority(int newpriority) Ini mengubah prioritas utas.
hasil () Ini menyebabkan utas saat ini berhenti dan utas lainnya dieksekusi.

Contoh: Dalam contoh program multithreading di Java ini, kita akan membuat thread dan menjelajahi metode bawaan yang tersedia untuk thread.

package demotest;
public class thread_example1 implements Runnable {
    @Override
    public void run() {
    }
    public static void main(String[] args) {
        Thread guruthread1 = new Thread();
        guruthread1.start();
        try {
            guruthread1.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        guruthread1.setPriority(1);
        int gurupriority = guruthread1.getPriority();
        System.out.println(gurupriority);
        System.out.println("Thread Running");
  }
}

Penjelasan kode:

Ketika Anda mengeksekusi kode di atas, Anda mendapatkan output berikut:

Keluaran:

5 adalah prioritas Thread, dan Thread Running adalah teks yang merupakan output dari kode kita.

Sinkronisasi Utas Java

Dalam multithreading, ada perilaku program yang tidak sinkron. Jika satu utas sedang menulis beberapa data dan utas lain yang membaca data pada saat yang sama, dapat menyebabkan inkonsistensi dalam aplikasi.

Ketika ada kebutuhan untuk mengakses sumber daya bersama oleh dua atau lebih utas, maka pendekatan sinkronisasi digunakan.

Java telah menyediakan metode tersinkronisasi untuk mengimplementasikan perilaku tersinkronisasi.

Dalam pendekatan ini, setelah utas mencapai di dalam blok yang disinkronkan, maka tidak ada utas lain yang dapat memanggil metode itu pada objek yang sama. Semua utas harus menunggu sampai utas itu menyelesaikan blok yang disinkronkan dan keluar dari sana.

Dengan cara ini, sinkronisasi membantu dalam aplikasi multithread. Satu utas harus menunggu sampai utas lainnya menyelesaikan eksekusinya baru kemudian utas lainnya diizinkan untuk dieksekusi.

Itu dapat ditulis dalam bentuk berikut:

Synchronized(object)
{  
        //Block of statements to be synchronized
}

Contoh Multithreading Java

Dalam contoh Java multithreading ini, kami akan mengambil dua utas dan mengambil nama utas.

Contoh1:

GuruThread1.java
package demotest;
public class GuruThread1 implements Runnable{

    /**
     * @param args
     */
    public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

Penjelasan kode:

Ketika Anda mengeksekusi kode di atas, Anda mendapatkan output berikut:

Keluaran:

Nama utas ditampilkan di sini sebagai

Contoh 2:

Dalam contoh multithreading di Java ini, kita akan belajar tentang mengganti metode run() dan start() metode dari antarmuka runnable dan membuat dua utas dari kelas itu dan menjalankannya sesuai dengan itu.

Juga, kami mengambil dua kelas,

package demotest;
public class GuruThread2 {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  GuruThread3 threadguru1 = new GuruThread3("guru1");
  threadguru1.start();
  GuruThread3 threadguru2 = new GuruThread3("guru2");
  threadguru2.start();
 }
}
class GuruThread3 implements Runnable {
 Thread guruthread;
 private String guruname;
 GuruThread3(String name) {
  guruname = name;
 }
 @Override
 public void run() {
  System.out.println("Thread running" + guruname);
  for (int i = 0; i < 4; i++) {
   System.out.println(i);
   System.out.println(guruname);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    System.out.println("Thread has been interrupted");
   }
  }
 }
 public void start() {
  System.out.println("Thread started");
  if (guruthread == null) {
   guruthread = new Thread(this, guruname);
   guruthread.start();
  }
 }
}

Penjelasan kode:

Ketika Anda menjalankan kode di atas, Anda mendapatkan output berikut:

Keluaran :

Ada dua utas karenanya, kami mendapat dua kali pesan "Utas dimulai".

Kami mendapatkan nama utas seperti yang telah kami keluarkan.

Itu masuk ke loop for di mana kita mencetak penghitung dan nama utas dan penghitung dimulai dengan 0.

Loop dijalankan tiga kali dan di antara utas ditidurkan selama 1000 milidetik.

Oleh karena itu, pertama, kita mendapatkan guru1 lalu guru2 lalu guru2 lagi karena utas tidur di sini selama 1000 milidetik dan kemudian guru1 berikutnya dan lagi guru1, utas tidur selama 1000 milidetik, jadi kita mendapatkan guru2 dan kemudian guru1.

Ringkasan

Dalam tutorial ini, kita melihat aplikasi multithreaded di Java dan cara menggunakan single dan multithread di Java.


java

  1. Program Halo Dunia Java
  2. Fungsi C++ dengan Contoh Program
  3. Tutorial Koleksi C# dengan Contoh
  4. Java String indexOf() Metode dengan Substring &Contoh
  5. Metode Java String charAt() dengan Contoh
  6. Metode Java String compareTo():​​Cara Menggunakan dengan Contoh
  7. Overloading Konstruktor di Java:Apa itu &Contoh Program
  8. Program Java untuk Mengecek Bilangan Prima
  9. Algoritma Insertion Sort di Java dengan Contoh Program
  10. Sortir Seleksi dalam Program Java dengan Contoh