本文共 1000 字,大约阅读时间需要 3 分钟。
什么是死锁?
多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。
不适当的使用“synchronized”关键词来管理线程对特定对象的访问。
“synchronized”关键词的作用是,确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的排他性的访问权。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。
package com.练习锁;
public class Test {
static Object o1 = new Object(); static Object o2 = new Object();public static void main(String[] args) {
new Thread(new Runnable() { public void run() { synchronized (o1) { System.out.println("线程1锁o1"); try { Thread.sleep(1000);//让当前线程睡眠,保证让另一线程得到o2,防止这个线程启动一下连续获得o1和o2两个对象的锁。 synchronized (o2) { System.out.println("线程1锁o2"); } } catch (InterruptedException e) { e.printStackTrace(); } } } }).start();new Thread(new Runnable() {
public void run() { synchronized (o2) { System.out.println("线程2锁o2"); synchronized (o1) { System.out.println("线程2锁o1"); } } } }).start();}
}
结果:线程1锁o1
线程2锁o2 --------------------- 作者:Ma_CSDN 来源:CSDN 原文:https://blog.csdn.net/xiao_ma_CSDN/article/details/78753242 版权声明:本文为博主原创文章,转载请附上博文链接!