[size=14.6666669845581px]关于多线程中"死锁"的问题 多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁 资源无法释放,因此同时等待,结果都拿不到 所以, 尽量不要嵌套使用 - package com.heima.syn;
-
- public class Demo5_DeadLock {
-
- /**
- * @param args
- */
- private static String s1 = "筷子左";
- private static String s2 = "筷子右";
-
- public static void main(String[] args) {
- new Thread() {
- public void run() {
- while(true) {
- synchronized(s1) {
- System.out.println(getName() + "...获取" + s1 + "等待" + s2);
- synchronized(s2) {
- System.out.println(getName() + "...拿到" + s2 + "开吃");
- }
- }
- }
- }
- }.start();
-
- new Thread() {
- public void run() {
- while(true) {
- synchronized(s2) {
- System.out.println(getName() + "...获取" + s2 + "等待" + s1);
- synchronized(s1) {
- System.out.println(getName() + "...拿到" + s1 + "开吃");
- }
- }
- }
- }
- }.start();
- }
- }
复制代码 结果是:[size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-0...拿到筷子右开吃 [size=14.6666669845581px]Thread-0...获取筷子左等待筷子右 [size=14.6666669845581px]Thread-1...获取筷子右等待筷子左 然而程序还在进行... 但是结果却不再变化,说明程序出现了"死锁",所以的所以, 尽量不要嵌套使用同步代码哦!
|