一个死锁的例子
2015-09-29 16:47
375 查看
当两个线程同时拥有一定的资源,但是都缺少对方手上的资源才能进行下一步动作,而去竞争对方的资源,从而都陷入等待的一种场景,这种场景被称为死锁。例如:A、B线程在运行开始时分别持有a、b对象,A拥有a,对象a被A上锁了,B拥有b,对象b被B上锁了,此时,线程A在要往后运行需要对象b,而线程B要往后运行需要对象a,此时A、B线程都希望获得对方的资源,但是手上的资源都不愿拿出来,这个时候就形成了“僵局”,进入了死锁。
死锁的一个例子:
死锁的一个例子:
package com.threads; /** * Package: com.threads * * File: MainMethod.java * * Copyright @ 2015 Corpration Name * */ public class MainMethod { public Object objA; public Object objB; public MainMethod() { objA = new Object(); objB = new Object(); } public void StartThreads(){ ThreadA a = new ThreadA(); ThreadB b = new ThreadB(); a.start(); b.start(); } class ThreadA extends Thread{ public void run(){ synchronized (objA) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (objB) { } } } } class ThreadB extends Thread{ public void run(){ synchronized (objB) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (objA) { } } } } public static void main(String[] args){ MainMethod m = new MainMethod(); m.StartThreads(); } }
相关文章推荐
- Rebalance Customer Balances Utility的使用
- android 代码控制文字的颜色值
- 操作记录
- 可编程渲染管线与着色器语言
- 快速排序
- C++读写EXCEL文件方式比较
- ARM linux内核启动时几个关键地址【转】
- Android最全的面试题总结
- 【Android笔记】Fragment用法(未完)
- php 链接数据库函数实例代码
- AutoCompleteTextView实现联想输入
- 修改 mvc webapi 默认返回 json 格式
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
- WCF心跳判断服务端及客户端是否掉线并实现重连接
- 冒泡排序
- 【Android笔记】Fragment用法(未完)
- 每一个Servlet只有一个实例,多个线程
- OpenCL优化应用项目
- Astyle Cannot convert to multi-byte string, reverting to English 问题解决办法-重新编译
- DirectX11 基本计算机颜色