Deadlock adalah bug di tingkat sistem operasi dan merupakan singkatan dari proses kebuntuan. Ini pertama kali diusulkan oleh Dijkstra ketika mempelajari algoritma banker pada tahun 1965. Ini adalah salah satu masalah paling sulit dalam sistem operasi komputer dan bahkan seluruh bidang pemrograman bersamaan.
Faktanya, ada banyak hal di dunia komputer yang perlu diselesaikan dengan banyak utas, karena dengan cara ini, sumber daya dapat digunakan untuk memaksimalkan efisiensi komputasi. Namun, pada kenyataannya, ada banyak situasi dalam sistem komputer di mana sumber daya hanya dapat digunakan oleh satu proses pada satu waktu, seperti printer, dan hanya satu proses yang dapat mengontrolnya pada saat yang sama. Dalam lingkungan pemrograman multi-saluran, beberapa proses sering berbagi sumber daya tersebut, dan suatu proses mungkin memerlukan lebih dari satu sumber daya. Oleh karena itu, beberapa proses akan bersaing untuk sumber daya yang terbatas dan urutan kemajuan akan tidak tepat, sehingga membentuk situasi menunggu siklus yang tidak terbatas. Kami menyebut kebuntuan negara bagian ini. Sederhananya, kebuntuan mengacu pada situasi di mana banyak proses bersepeda melalui sumber daya yang mereka tempati dan tetap dalam kebuntuan tanpa batas waktu. Jelas, jika tidak ada kekuatan eksternal, maka semua proses yang terlibat dalam kebuntuan akan selalu diblokir.
Nama File: deadthreadbyextend.java
Catatan:
1. Saat memulai utas, metode start dapat digunakan. Metode jalankan juga dapat dipanggil, tetapi hanya setara dengan panggilan normal dan dieksekusi di utas saat ini.
2. Sinkronisasi tidak dapat secara langsung memodifikasi variabel.
3. Blok yang disinkronkan tidak memaksa akses utama ke variabel di blok. Ini berarti bahwa parameter yang disinkronkan (ARGS) terkunci saat menjalankan pernyataan di dalam blok dan tidak dilepaskan sampai eksekusi selesai.
package com.ycf.study.thread;class Sources{int a;public void setA(int x) {synchronized (this) {this.a = x;try {Thread.sleep(2000);}catch (InterruptedException e) {e.printStackTrace();}}}} public class DeadThreadByExtend {public static void main(String[] args) {Sources s1 = new Sources();Sources s2 = new Sources();class MyThread1 extends java.lang.Thread {@Override public void run() {System.out.println("Thread 1 starts");synchronized (s1) {System.out.println("Thread 1 applies to modify s1 "); s1.seta (20); System.out.println (" Thread 1 keluar dan melepaskan kunci +++++++++++++++ ");}} kelas myThread2 memperluas java.lang.thread {@override void run run () {System.out.2) (") ("@@override public run () {System.out.2)) (" @Override public run () {System.Out.2. {System.out.println ("Thread 2 berlaku untuk memodifikasi s2"); s2.seta (20); System.out.println ("Thread 2 Change S2 Lengkapi"); System.out.println ("Thread 2 berlaku untuk memodifikasi S1"); S1.Seta (10); System.out.println ("Thread 2 Thread"); S1 (10); System.out.println ("Thread 2 Thread 2); merilis LOCK +++++++++++++++ ");}} mythread1 mt1 = myThread1 baru (); myThread2 mt2 = mythread2 baru (); mt1.start (); mt2.start ();}}Meringkaskan
Di atas adalah semua tentang contoh kode kebuntuan utas Java dalam artikel ini, saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini.