Java Tread多线程(3)死锁

作者 : 卿笃军

原文地址:http://blog.csdn.net/qingdujun/article/details/39367655

本文演示,Tread多线程死锁,简单的分析一下死锁产生的原因,并展示一个死锁的小Demo。

1)死锁产生原因

2)小Demo

一、死锁产生的原因:同步中嵌套同步。

二、一个死锁小Demo:(锁loacka中需要锁lockb,锁lockb中又需要锁locka,然后加上while(true)在里面一顿狂转,直接锁住了。)

package no.zuo.no.die;

//1.实现Runnable接口
class Zuosi implements Runnable
{
	private boolean flag;
	Zuosi(boolean f)
	{
		flag = f;
	}
	//2.重写run方法
	public void run()
	{
		if (flag)
		{
			while (true)
			{
				synchronized (CLock.locka)
				{
					System.out.println("if locka");
					synchronized (CLock.lockb)
					{
						System.out.println("if lockb");
					}
				}
			}
		}
		else
		{
			while (true)
			{
				synchronized (CLock.lockb)
				{
					System.out.println("else lockb");
					synchronized (CLock.locka)
					{
						System.out.println("else locka");
					}
				}
			}
		}
	}
}
//里面装2把锁
class CLock
{
	static Object locka = new Object();
	static Object lockb = new Object();
}

public class CDeadLock {

	public static void main(String[] args) {
		//3.创建2线程
		Thread t1 = new Thread(new Zuosi(true));
		Thread t2 = new Thread(new Zuosi(false));
		//4.启动线程
		t1.start();
		t2.start();
	}
}

运行显示结果(卡死了吧?锁住了!!!):

参考文献: Java视频 毕向东 主讲

原文地址:http://blog.csdn.net/qingdujun/article/details/39367655

时间: 2024-10-12 18:08:18

Java Tread多线程(3)死锁的相关文章

Java Tread多线程(1)实现Runnable接口

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39347245 本文演示,Tread多线程实现Runnable接口,以及简单的说明为什么有这种创建线程的方法. 一.创建线程的2中方法: 1)继承Thread类实现多线程,参见我的上一篇文章:Java Tread多线程(0)一个简单的多线程实例 : 2)第二种方法就是实现Runnable接口,创建一个新线程. 二.为什么要有这两种方法创建线程呢? ①主要原因:就是方法1)不

Java Tread多线程(2)多线程安全问题

作者 :卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39348093 本文演示,Tread多线程安全问题,以及一种解决多线程安全方式(线程同步). 1)一个线程不安全的Demo 2)线程同步 一.小Demo演示引出线程安全问题: package thread.runable1.qdj; //1.定义类实现Runnable接口 class RunDemo1 implements Runnable { private int x =

【java】多线程同步死锁

1 package 多线程; 2 class A{ 3 public synchronized void say(B b){ 4 System.out.println("A说:你把你的本给我,我把我的笔给你!"); 5 b.get(); 6 } 7 public synchronized void get(){ 8 System.out.println("A说:我得到了本,给你笔."); 9 } 10 } 11 class B{ 12 public synchron

Java Tread多线程(0)一个简单的多线程实例

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多线程时,一般步骤: 1)继承Thread函数. 2)覆盖run函数. 注意:1)main函数为主线程,main里面存放的是主线程的执行代码: Demo1为子线程,里面的run函数里面存放的是子线程需要执行的代码:其中,本文中主线程和子线程执行的优先级是一样的. 2)启动线程必须用start()启动,

java中多线程产生死锁的原因以及解决意见

1.  java中导致死锁的原因 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束.这是从网上其他文档看到的死锁产生的四个必要条件: 1.互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2.不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放. 3.请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有. 4.循环等待,

Java自学-多线程 死锁

Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对象1,接着试图占有对象2 线程2 首先占有对象2,接着试图占有对象1 线程1 等待线程2释放对象2 与此同时,线程2等待线程1释放对象1 这样就会...一直等待下去 package multiplethread; import charactor.Hero; public class TestThread { public static void main(String[] args

Java基础--多线程的方方面面

1,什么是线程?线程和进程的区别是什么? 2,什么是多线程?为什么设计多线程? 3,Java种多线程的实现方式是什么?有什么区别? 4,线程的状态控制有哪些方法? 5,线程安全.死锁和生产者--消费者 6,线程的优化有哪些方法? 1,什么是线程?线程和进程的区别是什么? 线程是程序执行的最小单元. 区别: 进程是操作系统进行资源处理和分配的最小单位,而一个进程可以包含多个线程,并共享进程的资源. 2,什么是多线程?为什么设计多线程? 介绍之前,我们需要理解并行和并发的定义: 并行:同一个时刻有多

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.

java之 ------ 多线程(从基础到加强)

首先了解线程的一些基本知识: 1.线程的定义: 是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位. 2.线程的属性: 并发性.共享性.动态性和结构性 3.线程的状态 然后就是java与线程的调度: 1.主要是通过实现Runnable接口和继承Thread类来实现线程的调度和操作 a.Runnable接口(里面就一个run方法,只要通过重写run方法就可以实现自己想要的线程功能) public interface Runnable { public abstract vo