Perbedaan Kunci – tidur vs menunggu di Java
Sleep and wait adalah dua metode yang digunakan untuk multithreading di Java. Metode sleep milik kelas Thread sedangkan metode wait berasal dari kelas Object. Perbedaan utama antara sleep dan wait di Java adalah, sleep digunakan untuk menangguhkan eksekusi utas saat ini untuk jumlah milidetik yang ditentukan sementara metode wait digunakan untuk menyebabkan utas saat ini menunggu hingga utas lain memanggil notify atau notifyAll metode untuk objek.
Thread adalah unit pemrosesan terkecil dalam sistem operasi. Ini adalah aliran kontrol sekuensial tunggal dalam suatu program. Threadnya ringan. Multithreading adalah mekanisme menjalankan beberapa utas secara bersamaan. Bahasa pemrograman seperti Java mendukung multithreading. Multithreading memiliki kelebihan karena memungkinkan untuk menjalankan beberapa utas secara bersamaan dan utas independen satu sama lain. Ada metode di Java yang dapat digunakan untuk multithreading. Dua dari mereka tidur dan menunggu.
Apa itu tidur di Jawa?
Ada beberapa proses yang berjalan di sistem operasi. Proses adalah program yang sedang dieksekusi. Setiap proses dapat memiliki beberapa utas, dan ada peralihan konteks yang terjadi di antara utas ini. Di Jawa, ada dua cara untuk membuat utas. Yaitu dengan memperluas kelas thread atau dengan mengimplementasikan antarmuka Runnable. Kelas Thread memiliki konstruktor dan metode untuk membuat dan melakukan operasi pada utas. Kelas Thread memperluas kelas Object dan mengimplementasikan antarmuka Runnable. Antarmuka Runnable harus diimplementasikan oleh kelas mana pun yang instance-nya dimaksudkan untuk dieksekusi oleh utas. Ketika utas dieksekusi, kode yang harus dieksekusi ditulis di dalam metode run. Utas yang harus dijalankan dipilih oleh penjadwal utas. Hanya satu utas yang berjalan dalam satu proses.
Sebuah thread melewati beberapa fase. Setelah membuat objek kelas Thread, programmer dapat memanggil metode start. Sebelum menjalankan metode itu, utas dikatakan dalam keadaan baru. Penjadwal utas memilih utas untuk dijalankan. Jika utas belum dipilih oleh penjadwal utas tetapi jika metode mulai dipanggil, maka utas dalam keadaan dapat dijalankan. Setelah penjadwal utas memilih utas untuk dieksekusi, itu beralih ke status berjalan. Jika utas hidup tetapi saat ini tidak memenuhi syarat untuk dijalankan, maka utas tersebut dalam status tidak dapat dijalankan atau diblokir. Setelah metode run selesai, utas beralih ke status dihentikan. Itulah fase-fase utama dari siklus hidup thread.
Ada berbagai metode yang tersedia di kelas utas untuk melakukan tugas yang berbeda. Metode tidur digunakan untuk metode tidur untuk jumlah waktu tertentu. Sintaks untuk metode sleep adalah public void sleep (milidetik panjang) throws InterruptedException. Ini menyebabkan utas yang sedang dieksekusi untuk menghentikan eksekusi sementara untuk jumlah milidetik yang ditentukan. Jika utas lain menginterupsi utas saat ini, status terputus dari utas saat ini dihapus ketika pengecualian ini dilemparkan.
Gambar 01: Program Java dengan Metode sleep
Menurut program di atas, metode run berisi kode yang harus dijalankan. Dalam program utama, dua objek dari ExampleThread1 dibuat, dan metode start dipanggil pada mereka. Itu akan memungkinkan untuk menjalankan kode di dalam metode run. Hanya satu utas yang dieksekusi pada satu waktu. Dengan Benang.tidur (1000); akan memungkinkan utas pertama untuk menghentikan eksekusi selama 1000 milidetik. Saat sebuah utas sedang tidur, penjadwal utas mengambil utas lainnya.
Apa yang menunggu di Jawa?
Beberapa utas mungkin mengakses sumber daya bersama. Hal ini dapat menyebabkan untuk menghasilkan output yang salah. Sinkronisasi utas dapat digunakan untuk membuat hanya satu utas untuk mengakses sumber daya bersama. Asumsikan situasi sebagai berikut. Jika, ada dua utas sebagai t1 dan t2, t1 mulai menyimpan nilai ke file teks bernama Text1.txt. Nilai-nilai tersebut akan digunakan untuk beberapa perhitungan lain ketika t1 kembali. Jika t2 dimulai sebelum t1 kembali, t2 dapat mengubah nilai yang disimpan oleh t1. Hal ini dapat menyebabkan t1 memberikan output yang salah. Dengan bantuan sinkronisasi, ketika t1 mulai menggunakan file Text1.txt, file tersebut dapat dikunci, sehingga hanya dapat diakses oleh t1. T2 tidak dapat mengubahnya sampai t1 melepaskan kunci untuk mengakses file teks tersebut. Ketika tugas selesai, t1 dapat melepaskan kunci. Kunci juga dikenal sebagai monitor.
Sinkronisasi utas dapat dicapai dengan komunikasi antar utas. Bagian kritis adalah segmen kode yang mengakses sumber daya bersama. Dalam komunikasi antar-utas, sebuah utas dijeda berjalan di bagian kritisnya, dan utas lain diizinkan masuk di bagian kritis yang sama untuk dieksekusi. Ini diimplementasikan menggunakan metode wait, notify, dan notifyAll. Mereka milik kelas Object. Metode wait digunakan untuk mengizinkan utas saat ini melepaskan kunci dan menunggu hingga utas lain memanggil metode notify atau notifyAll untuk objek. Metode notifikasi digunakan untuk membangunkan satu utas yang menunggu kunci. NotifyAll membangunkan semua utas yang menunggu di kunci.
Gambar 02: Kelas Kalkulator
Gambar 03: Metode Utama
Kelas Kalkulator memperluas Thread. Blok yang disinkronkan ada di dalam metode run. Metode for loop dan notify ada di dalam blok yang disinkronkan. Di dalam metode utama, sebuah instance dari utas dibuat dan metode mulai dipanggil pada instance itu. Metode utama akan menunggu sampai utas memberikan pemberitahuan. Saat menjalankan program, metode utama menunggu hingga seluruh eksekusi metode run dan menunggu metode notify. Setelah metode notify dipanggil, metode utama berhenti menunggu dan mulai mengeksekusi sisa kode. Main menunggu sampai utas Kalkulator selesai. Akhirnya hasil penjumlahan tercetak.
Jika tidak ada blok yang disinkronkan dan jika metode utama memiliki kode seperti di bawah ini, itu akan memberikan output sebagai nol karena tidak menunggu utas lainnya selesai.
Kalkulator t1=Kalkulator baru ();
t1. mulai ();
System.out.println (t1.sum);
Apa Persamaan Antara tidur dan menunggu di Jawa?
Sleep dan wait adalah metode yang dapat digunakan saat mengimplementasikan multithreading di Java
Apa Perbedaan Antara tidur dan menunggu di Jawa?
tidur vs menunggu di Jawa |
|
Metode tidur menyebabkan utas saat ini menunda eksekusi untuk jumlah milidetik yang ditentukan, tergantung pada presisi dan akurasi pengatur waktu dan penjadwal sistem. | Metode wait menyebabkan utas saat ini menunggu hingga utas lain memanggil metode notify atau notifyAll untuk objek. |
Asosiasi dengan Kunci | |
Metode tidur tidak melepaskan kunci pada objek selama sinkronisasi. | Metode tunggu melepaskan kunci selama sinkronisasi. |
Metode Pelaksanaan | |
Metode tidur dijalankan pada utas saat ini. | Metode wait dipanggil pada objek. |
Kelas Terkait | |
Tidur adalah metode kelas Thread. | Penantian adalah metode kelas Objek. |
Penyelesaian | |
Proses tidur selesai setelah jumlah waktu yang ditentukan selesai. | Metode tunggu diinterupsi dengan memanggil metode notify atau notifyAll. |
Ringkasan – tidur vs menunggu di Java
Ada beberapa proses yang berjalan di sistem operasi. Setiap proses dapat memiliki beberapa utas. Thread adalah unit pemrosesan terkecil dalam sistem operasi. Bahasa pemrograman Java mendukung multithreading. Ini memungkinkan menjalankan beberapa utas secara bersamaan. Sleep dan wait adalah dua metode yang dapat digunakan saat mengimplementasikan multi-threading. Perbedaan antara sleep dan wait di Java adalah, sleep digunakan untuk menunda eksekusi utas saat ini untuk jumlah milidetik yang ditentukan sementara metode wait digunakan untuk menyebabkan utas saat ini menunggu hingga utas lain memanggil notify atau notifyAll metode untuk objek.