Maison >Java >javaDidacticiel >Le concept et la solution du blocage en Java
1. Processus de blocage et solutions
1. Points clés
(1) Maîtriser la notion de blocage et l'apparition d'un blocage La cause première du blocage.
(2) Comprendre les conditions nécessaires à l'impasse - les quatre conditions suivantes doivent être remplies en même temps : condition d'exclusion mutuelle, condition de non-préemption, condition de possession et d'application et condition d'attente de boucle.
(3) Rappelez-vous les méthodes générales de résolution des blocages et maîtrisez les idées de base de la prévention des blocages et de l'évitement des blocages.
(4) Maîtriser la stratégie d'allocation ordonnée des ressources dans la stratégie de prévention des impasses.
(5) Comprendre le concept de séquence de sécurité des processus et la relation entre l'impasse et la séquence de sécurité.
(6) Comprendre l’algorithme du banquier.
(7) Comprendre le diagramme d'allocation des ressources.
(8) Comprendre les idées de détection et de récupération des impasses.
2. Concernant l'impasse, ma compréhension personnelle :
Après une période d'étude, la notion d'impasse que je comprends est que, par exemple, il y a deux processus , chaque processus A est verrouillé par deux verrous (Lock 1, Lock 2). La différence est que les emplacements d'application du verrou sont différents dans les deux processus. Par conséquent, le démarrage complet d’un processus nécessite un verrou interne, et ce verrou se trouve dans un autre processus. Le verrou dont un autre processus a besoin pour démarrer (ou exécuter) complètement le processus interne se trouve dans un autre programme. De cette façon, ils sont liés les uns aux autres, et ils sont tous en état de préparation mais incapables d'exécuter. A provoqué un état de blocage. J'ai dessiné un diagramme schématique basé sur ma compréhension :
public class Test15 {public static void main(String[] args) throws InterruptedException {new Thread(new DeadLockThread(true)).start();//Thread.sleep(10);在中间用上它可以使结果交替出现,我是为了看死锁的效果,用它对比一下。new Thread(new DeadLockThread(false)).start(); } }class DeadLockThread implements Runnable {static Object o1 = new Object();static Object o2 = new Object();private boolean flag; DeadLockThread(boolean flag) {this.flag = flag; }public void run() {if (flag == true) {while (true) {synchronized (o1) { System.out.println("这是锁o1");synchronized (o2) { System.out.println("这是锁o2"); }
Résultats d'impression :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!