java
Java adalah bahasa pemrograman multi-utas yang berarti kita dapat mengembangkan program multi-threaded menggunakan Java. Program multi-utas berisi dua atau lebih bagian yang dapat berjalan secara bersamaan dan setiap bagian dapat menangani tugas yang berbeda pada saat yang sama dengan memanfaatkan sumber daya yang tersedia secara optimal khususnya ketika komputer Anda memiliki banyak CPU.
Menurut definisi, multitasking adalah ketika beberapa proses berbagi sumber daya pemrosesan umum seperti CPU. Multi-threading memperluas gagasan multitasking ke dalam aplikasi di mana Anda dapat membagi operasi tertentu dalam satu aplikasi menjadi thread individu. Setiap utas dapat berjalan secara paralel. OS membagi waktu pemrosesan tidak hanya di antara aplikasi yang berbeda, tetapi juga di antara setiap utas dalam aplikasi.
Multi-threading memungkinkan Anda untuk menulis dengan cara di mana beberapa aktivitas dapat berjalan secara bersamaan dalam program yang sama.
Sebuah thread melewati berbagai tahap dalam siklus hidupnya. Misalnya, utas lahir, dimulai, berjalan, dan kemudian mati. Diagram berikut menunjukkan siklus hidup lengkap dari sebuah thread.
Berikut tahapan daur hidup
Baru Sebuah utas baru memulai siklus hidupnya di status baru. Tetap dalam keadaan ini sampai program memulai utas. Ini juga disebut sebagai utas lahir .
Dapat dijalankan Setelah utas yang baru lahir dimulai, utas tersebut menjadi dapat dijalankan. Sebuah utas dalam status ini dianggap menjalankan tugasnya.
Menunggu Terkadang, sebuah utas bertransisi ke status menunggu sementara utas menunggu utas lain untuk melakukan tugas. Sebuah utas bertransisi kembali ke status yang dapat dijalankan hanya ketika utas lain memberi sinyal kepada utas yang menunggu untuk melanjutkan eksekusi.
Waktu Menunggu Thread yang dapat dijalankan dapat memasuki status menunggu waktunya untuk interval waktu tertentu. Sebuah utas dalam status ini bertransisi kembali ke status yang dapat dijalankan saat interval waktu tersebut berakhir atau saat peristiwa yang ditunggu-tunggu terjadi.
Dihentikan (Mati) Sebuah thread yang dapat dijalankan memasuki status terminasi saat menyelesaikan tugasnya atau sebaliknya.
Setiap utas Java memiliki prioritas yang membantu sistem operasi menentukan urutan utas yang dijadwalkan.
Prioritas utas Java berada dalam kisaran antara MIN_PRIORITY (konstanta 1) dan MAX_PRIORITY (konstanta 10). Secara default, setiap utas diberi prioritas NORM_PRIORITY (konstanta 5).
Utas dengan prioritas lebih tinggi lebih penting untuk suatu program dan harus dialokasikan waktu prosesor sebelum utas dengan prioritas lebih rendah. Namun, prioritas utas tidak dapat menjamin urutan pelaksanaan utas dan sangat bergantung pada platform.
Jika kelas Anda dimaksudkan untuk dieksekusi sebagai utas, maka Anda dapat mencapainya dengan menerapkan Runnable antarmuka. Anda harus mengikuti tiga langkah dasar
Sebagai langkah pertama, Anda perlu mengimplementasikan metode run() yang disediakan oleh Runnable antarmuka. Metode ini menyediakan titik masuk untuk utas dan Anda akan memasukkan logika bisnis lengkap Anda ke dalam metode ini. Berikut ini adalah sintaks sederhana dari metode run() −
public void run( )
Sebagai langkah kedua, Anda akan membuat instance Utas objek menggunakan konstruktor berikut
Thread(Runnable threadObj, String threadName);
Dimana, threadObj adalah turunan dari kelas yang mengimplementasikan Runnable antarmuka dan nama thread adalah nama yang diberikan untuk utas baru.
Setelah objek Thread dibuat, Anda dapat memulainya dengan memanggil start() metode, yang mengeksekusi panggilan ke metode run(). Berikut ini adalah sintaks sederhana dari metode start() −
void start();
Berikut adalah contoh yang membuat utas baru dan mulai menjalankannya
Demo Langsungclass RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( String name) { threadName = name; System.out.println("Creating " + threadName ); } public void run() { System.out.println("Running " + threadName ); try { for(int i = 4; i > 0; i--) { System.out.println("Thread: " + threadName + ", " + i); // Let the thread sleep for a while. Thread.sleep(50); } } catch (InterruptedException e) { System.out.println("Thread " + threadName + " interrupted."); } System.out.println("Thread " + threadName + " exiting."); } public void start () { System.out.println("Starting " + threadName ); if (t == null) { t = new Thread (this, threadName); t.start (); } } } public class TestThread { public static void main(String args[]) { RunnableDemo R1 = new RunnableDemo( "Thread-1"); R1.start(); RunnableDemo R2 = new RunnableDemo( "Thread-2"); R2.start(); } }
Ini akan menghasilkan hasil berikut
Creating Thread-1 Starting Thread-1 Creating Thread-2 Starting Thread-2 Running Thread-1 Thread: Thread-1, 4 Running Thread-2 Thread: Thread-2, 4 Thread: Thread-1, 3 Thread: Thread-2, 3 Thread: Thread-1, 2 Thread: Thread-2, 2 Thread: Thread-1, 1 Thread: Thread-2, 1 Thread Thread-1 exiting. Thread Thread-2 exiting.
Cara kedua untuk membuat utas adalah dengan membuat kelas baru yang memperluas Utas kelas menggunakan dua langkah sederhana berikut. Pendekatan ini memberikan lebih banyak fleksibilitas dalam menangani beberapa utas yang dibuat menggunakan metode yang tersedia di kelas Utas.
Anda harus mengganti run() metode yang tersedia di kelas Thread. Metode ini menyediakan titik masuk untuk utas dan Anda akan memasukkan logika bisnis lengkap Anda ke dalam metode ini. Berikut ini adalah sintaks sederhana dari metode run() −
public void run( )
Setelah objek Thread dibuat, Anda dapat memulainya dengan memanggil start() metode, yang mengeksekusi panggilan ke metode run(). Berikut ini adalah sintaks sederhana dari metode start() −
void start( );
Berikut adalah program sebelumnya yang ditulis ulang untuk memperpanjang Thread
Demo Langsungclass ThreadDemo extends Thread { private Thread t; private String threadName; ThreadDemo( String name) { threadName = name; System.out.println("Creating " + threadName ); } public void run() { System.out.println("Running " + threadName ); try { for(int i = 4; i > 0; i--) { System.out.println("Thread: " + threadName + ", " + i); // Let the thread sleep for a while. Thread.sleep(50); } } catch (InterruptedException e) { System.out.println("Thread " + threadName + " interrupted."); } System.out.println("Thread " + threadName + " exiting."); } public void start () { System.out.println("Starting " + threadName ); if (t == null) { t = new Thread (this, threadName); t.start (); } } } public class TestThread { public static void main(String args[]) { ThreadDemo T1 = new ThreadDemo( "Thread-1"); T1.start(); ThreadDemo T2 = new ThreadDemo( "Thread-2"); T2.start(); } }
Ini akan menghasilkan hasil berikut
Creating Thread-1 Starting Thread-1 Creating Thread-2 Starting Thread-2 Running Thread-1 Thread: Thread-1, 4 Running Thread-2 Thread: Thread-2, 4 Thread: Thread-1, 3 Thread: Thread-2, 3 Thread: Thread-1, 2 Thread: Thread-2, 2 Thread: Thread-1, 1 Thread: Thread-2, 1 Thread Thread-1 exiting. Thread Thread-2 exiting.
Berikut adalah daftar metode penting yang tersedia di kelas Thread.
No.Pr. | Metode &Deskripsi |
---|---|
1 | mulai batal publik() Memulai utas di jalur eksekusi yang terpisah, lalu memanggil metode run() pada objek Utas ini. |
2 | public void run() Jika objek Thread ini dibuat menggunakan target Runnable yang terpisah, metode run() akan dipanggil pada objek Runnable tersebut. |
3 | public final void setName(Nama string) Mengubah nama objek Thread. Ada juga metode getName() untuk mengambil nama. |
4 | setPriority batal akhir publik(prioritas int) Menetapkan prioritas objek Thread ini. Nilai yang mungkin antara 1 dan 10. |
5 | public final void setDaemon(boolean on) Parameter true menunjukkan Thread ini sebagai thread daemon. |
6 | penggabungan batal akhir publik (milidetik panjang) Utas saat ini memanggil metode ini pada utas kedua, menyebabkan utas saat ini memblokir hingga utas kedua berakhir atau jumlah milidetik yang ditentukan berlalu. |
7 | interupsi kekosongan publik() Menginterupsi utas ini, menyebabkannya melanjutkan eksekusi jika diblokir karena alasan apa pun. |
8 | boolean final publik isAlive() Mengembalikan nilai true jika utas masih hidup, yaitu kapan pun setelah utas dimulai tetapi sebelum berjalan hingga selesai. |
Metode sebelumnya dipanggil pada objek Thread tertentu. Metode berikut di kelas Thread adalah statis. Memanggil salah satu metode statis melakukan operasi pada utas yang sedang berjalan.
No.Pr. | Metode &Deskripsi |
---|---|
1 | hasil kekosongan statis publik() Menyebabkan utas yang sedang berjalan menghasilkan utas lain dengan prioritas yang sama yang menunggu untuk dijadwalkan. |
2 | tidur kosong statis publik (milidetik panjang) Menyebabkan utas yang sedang berjalan diblokir setidaknya selama jumlah milidetik yang ditentukan. |
3 | public static boolean holdingLock(Object x) Mengembalikan nilai true jika utas saat ini memegang kunci pada Objek yang diberikan. |
4 | Utas statis publik saat iniThread() Mengembalikan referensi ke utas yang sedang berjalan, yang merupakan utas yang memanggil metode ini. |
5 | public static void dumpStack() Mencetak jejak tumpukan untuk utas yang sedang berjalan, yang berguna saat men-debug aplikasi multiutas. |
Program ThreadClassDemo berikut menunjukkan beberapa metode kelas Thread ini. Pertimbangkan kelas DisplayMessage yang mengimplementasikan Runnable
// File Name : DisplayMessage.java // Create a thread to implement Runnable public class DisplayMessage implements Runnable { private String message; public DisplayMessage(String message) { this.message = message; } public void run() { while(true) { System.out.println(message); } } }
Berikut adalah kelas lain yang memperluas kelas Thread
// File Name : GuessANumber.java // Create a thread to extentd Thread public class GuessANumber extends Thread { private int number; public GuessANumber(int number) { this.number = number; } public void run() { int counter = 0; int guess = 0; do { guess = (int) (Math.random() * 100 + 1); System.out.println(this.getName() + " guesses " + guess); counter++; } while(guess != number); System.out.println("** Correct!" + this.getName() + "in" + counter + "guesses.**"); } }
Berikut ini adalah program utama, yang menggunakan kelas-kelas yang ditentukan di atas −
// File Name : ThreadClassDemo.java public class ThreadClassDemo { public static void main(String [] args) { Runnable hello = new DisplayMessage("Hello"); Thread thread1 = new Thread(hello); thread1.setDaemon(true); thread1.setName("hello"); System.out.println("Starting hello thread..."); thread1.start(); Runnable bye = new DisplayMessage("Goodbye"); Thread thread2 = new Thread(bye); thread2.setPriority(Thread.MIN_PRIORITY); thread2.setDaemon(true); System.out.println("Starting goodbye thread..."); thread2.start(); System.out.println("Starting thread3..."); Thread thread3 = new GuessANumber(27); thread3.start(); try { thread3.join(); } catch (InterruptedException e) { System.out.println("Thread interrupted."); } System.out.println("Starting thread4..."); Thread thread4 = new GuessANumber(75); thread4.start(); System.out.println("main() is ending..."); } }
Ini akan menghasilkan hasil berikut. Anda dapat mencoba contoh ini lagi dan lagi dan Anda akan mendapatkan hasil yang berbeda setiap saat.
Starting hello thread... Starting goodbye thread... Hello Hello Hello Hello Hello Hello Goodbye Goodbye Goodbye Goodbye Goodbye .......
Saat melakukan pemrograman Multithreading di Java, Anda harus memiliki konsep-konsep berikut yang sangat berguna
Apa itu sinkronisasi utas?
Menangani komunikasi antar utas
Menangani kebuntuan utas
Operasi utas utama
java
Antarmuka Antrian Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java Queue dan metodenya. Queue antarmuka kerangka koleksi Java menyediakan fungsionalitas struktur data antrian. Ini memperluas Collection antarmuka. Kelas yang Menerapkan Antrian Sejak Queue adalah antarmuka, kami t
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.
Bahasa pemrograman python memungkinkan Anda untuk menggunakan multiprocessing atau multithreading. Dalam tutorial ini, Anda akan belajar cara menulis aplikasi multithread dengan Python. Apa itu Utas? Utas adalah unit eksekusi pada pemrograman bersamaan. Multithreading adalah teknik yang memungkinka
Java adalah bahasa pemrograman multi-utas yang berarti kita dapat mengembangkan program multi-threaded menggunakan Java. Program multi-utas berisi dua atau lebih bagian yang dapat berjalan secara bersamaan dan setiap bagian dapat menangani tugas yang berbeda pada saat yang sama dengan memanfaatkan s