关于线程死锁
来源:互联网 发布:视频动画软件手里 编辑:程序博客网 时间:2024/06/05 03:55
在了解死锁之前,必须回顾一下静态变量的概念:static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,
在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,
在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。(百度上面笼统的说法)
在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,
在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。(百度上面笼统的说法)
public class MyDeadLock implements Runnable{static Object o1 = new Object(),o2 = new Object();/*这里必须声明为静态,因为这样o1和o2才能被两个线程所共享,并由此产生死锁;否则 * 每个对象都拥有自己的Object,并不能产生死锁现象 * 所以必须了解死锁和静态对象(静态变量)的概念。*/int a = 1;MyDeadLock(int a){this.a = a;}public void run() {System.out.println("No:" + a + "start");switch(this.a){case 1:synchronized (o1) {try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();}synchronized (o2) {//这个对象的同步锁必须在前一个锁的里面System.out.println("No Lock");}}break;case 2:synchronized (o2) {try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();}synchronized (o1) {//这个对象的同步锁必须在前一个锁的里面System.out.println("No Lock");}}}}public static void main(String[] args) {Thread t1 = new Thread(new MyDeadLock(1));Thread t2 = new Thread(new MyDeadLock(2));t1.start();t2.start();}}
0 0
- 关于线程死锁
- 关于线程死锁
- 关于线程死锁
- 关于线程死锁的问题
- 关于gdb调试线程死锁
- 关于使用WinDebug查看线程死锁问题
- 关于使用Windbg查看线程死锁问题
- 关于线程死锁的了解(LIUNX)
- 关于实现线程死锁的一个例子
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- C++中重载、重写(覆盖)和隐藏的区别实例分析
- ubuntu下配置jdk
- Deb命令
- 安装.rpm
- 文件流close的小问题
- 关于线程死锁
- 生产者与消费者
- Android Studio 使用Gradle多渠道打包的原理与方法
- CocoaPods详解之----使用篇
- Xcode 中安装的插件的目录
- 【STL源码剖析读书笔记】【第4章】序列式容器之vector
- VIM的配置
- 第39课第二题
- Java 基础 第七天