谁能写一个简单的线程死锁的例子出来

本帖子已过去太久远了,不再提供回复功能。2355人阅读
自己今天想到死锁,就试着写了一个。
package com.ljl.
public class DealLock implements Runnable {
private int flag = 1;
// 此对象必须是静态的,同步必须是被多个线程共享
static Object resource1 = new Object(), resource2 = new Object();
public void run() {
if (flag == 1) {
synchronized (resource1) {
System.out.println(&resource1&);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
synchronized (resource2) {
System.out.println(&resource2&);
if (flag == 0) {
synchronized (resource2) {
System.out.println(&resource2&);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
synchronized (resource1) {
System.out.println(&resource1&);
public static void main(String[] args) {
DealLock lock1 = new DealLock();
DealLock lock2 = new DealLock();
lock1.flag = 1;
lock2.flag = 0;
Thread ll1 = new Thread(lock1);
Thread ll2 = new Thread(lock2);
ll1.start();
ll2.start();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19276次
排名:千里之外
原创:12篇
评论:17条
(3)(2)(3)(1)(3)2807人阅读
JAVA SE(9)
& &----------------------------------------&&&、期待与您交流!
-------------------------------------------
在多线程程序中死锁的一个令人头疼的问题,为了避免死锁就要避免死锁产生,就要知道死锁产生的条件
死锁产生的原因是同步嵌套,所以在开发过程中要尽量避免同步嵌套
下面是我的一个简单的同步死锁案例:
定义两个锁
class Lock{
public static Lock locka = new Lock();
public static Lock lockb = new Lock();
}写一个线程
public class ThreadDemo4 extends Thread{
ThreadDemo4(boolean flag){
this.flag =
public void run() {
//两个线程来回切换
while(true){
//同步嵌套
//locka嵌套lockb
synchronized (Lock.locka) {
System.out.println(Thread.currentThread().getName()+&...if locka&);
synchronized (Lock.lockb) {
System.out.println(Thread.currentThread().getName()+&...else lockb&);
while(true){
//同步嵌套
//lockb嵌套locka
synchronized (Lock.lockb) {
System.out.println(Thread.currentThread().getName()+&...if lockb&);
synchronized (Lock.locka) {
System.out.println(Thread.currentThread().getName()+&...else lockb&);
}写一个测试类
class ThreadTest2{
public static void main(String[] args) {
ThreadDemo4 t1 = new ThreadDemo4(false);
ThreadDemo4 t2 = new ThreadDemo4(true);
t1.start();
t2.start();
}运行后发现线程间互相抢夺资源,出现死锁的现象
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:125357次
积分:1383
积分:1383
排名:千里之外
原创:19篇
转载:19篇
评论:15条
(2)(9)(14)(1)(9)(2)(1)编写一个程序使两个线程陷入死锁 - crazy frog - ITeye技术网站
博客分类:
来源于:/?p=710 进去看看吧 一定会有收获的,搬砖到此只是为了收集起来,免得主任删除等操作。
public class DeadlockExample {
String resource1 = "资源1";
String resource2 = "资源2";
Thread t1 = new Thread("线程1") {
public void run() {
while (true) {
synchronized (resource1) {
synchronized (resource2) {
System.out.printf("线程1拥有[%s], 需要[%s]\n", resource1, resource2);
Thread t2 = new Thread("线程2") {
public void run() {
while (true) {
synchronized (resource2) {
synchronized (resource1) {
System.out.printf("线程2拥有[%s], 需要[%s]\n", resource2, resource1);
public static void main(String a[]) {
DeadlockExample test = new DeadlockExample();
test.t1.start();
test.t2.start();
hy2012_campus
浏览: 5488 次
来自: 河南
这都是看别人写的 然后抽出来 ,都是盗版的,在哪里盗版的我都忘 ...
写的不错哈

我要回帖

更多关于 线程死锁的原因 的文章

 

随机推荐