北京通州区网站建设,互联网十大创业项目,如何利用国外的网站开发客户,9uu最新域址永久什么是死锁#xff1f; 由于两个或者多个线程互相持有对方所需要的资源#xff0c;导致线程处于等待状态#xff0c;造成死锁。 为什么会产生死锁#xff08;为什么会互相占用对方的资源#xff09; 因为系统资源不足。 进程运行推进的顺序不合适。 资源分配不当等。产生死… 什么是死锁 由于两个或者多个线程互相持有对方所需要的资源导致线程处于等待状态造成死锁。 为什么会产生死锁为什么会互相占用对方的资源 因为系统资源不足。 进程运行推进的顺序不合适。 资源分配不当等。产生死锁的四个必要条件 互斥条件一个资源每次只能被一个进程使用。 请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放。 不剥夺条件进程已获得的资源在末使用完之前不能强行剥夺。 循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系。 手写死锁 public class DeadLock {public static void main(String[] args) {Object object1 new Object();Object object2 new Object();Thread thread1 new Thread(new FirstThread(object1, object2));Thread thread2 new Thread(new SecondThread(object1, object2));thread1.start();thread2.start();}
}class FirstThread implements Runnable {Object object1;Object object2;public FirstThread(Object object1, Object object2) {this.object1 object1;this.object2 object2;}Overridepublic void run() {synchronized (object1) {// 获得锁对象1try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (object2) {// 获得锁对象2
}}}
}class SecondThread implements Runnable {Object object1;Object object2;public SecondThread(Object object1, Object object2) {this.object1 object1;this.object2 object2;}Overridepublic void run() {synchronized (object2) {// 获得锁对象2try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (object1) {// 获得锁对象1
}}}
} 转载于:https://www.cnblogs.com/java-spring/p/10792062.html