`

线程—代码模拟—死锁

阅读更多
1、背景知识


关于进程和线程的区别,总有人喜欢这样问。
这就像问 java中 final 、 finally 、finalize 的区别一样滑稽。(只是因为这3个关键字的开头都含有f、i、n、a、l这几个字母么?)

进程和线程是2种不同的程序运行的机制。2者实现的方式不同。基本上没有可比性。
用进程设计实现的程序,跑不了所谓的线程。即使有线程的概念,也和使用线程实现的程序中线程的概念相差甚远。2者根本不是一个东西。

如果要谈区别,说:进程设计理念 和 线程设计理念 有何区别。我想还不多。不要钻进进程里谈进程和线程,也不要钻进线程里谈进程和线程。

java虚拟机是线程实现的。



2、死锁

在一个线程中,需要锁定2个及以上对象,但是需要去锁定的对象,被别的线程锁定,而别的线程依赖当前线程已锁定的对象。

TestDeadLock.java
public class TestDeadLock implements Runnable{
	public int flag =1;
	static Object o1 = new Object();
	static Object o2 = new Object();

	public void run(){
		System.out.println("flag=" +flag);
		if(flag == 1){
			synchronized(o1){
				try{
					Thread.sleep(500);
				}catch(Exception e){
					e.printStackTrace();
				}
			synchronized(o2){
				System.out.println("1");
			} 			 			 			
			}
		}
		if(flag == 0){
			synchronized(o2){
				try{
					Thread.sleep(500);
				}catch(Exception e){
					e.printStackTrace();
				}
			synchronized(o1){
				System.out.println("0");
			} 			 			 			
			}
		} 
	}
	public static void main(String[] args){
		TestDeadLock td1 = new TestDeadLock();
		TestDeadLock td2 = new TestDeadLock();
		td1.flag = 1;
		td2.flag = 0;
		Thread t1 = new Thread(td1);
		Thread t2 = new Thread(td2);
		t1.start();
		t2.start();
	}
}













-
分享到:
评论

相关推荐

    Java实现线程死锁

     春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Synchronized关键字,于是自己定义了两个资源模拟了一下。后面想想肠子都悔青了,于是自己在电脑上...

    Java编程之多线程死锁与线程间通信简单实现代码

    主要介绍了Java编程之多线程死锁与线程间通信简单实现代码,具有一定参考价值,需要的朋友可以了解下。

    Java高级程序设计-多线程(二).pptx

    本章内容 掌握同步代码块的使用 掌握同步方法的使用 理解线程死锁 掌握 ThreadLocal 类的使用 使用多线程模拟猴子采花 使用同步方法模拟购票 使用多线程模拟购物订单生成 使用 ThreadLocal 类模拟银行取款 Java高级...

    Linux系统编程之线程同步

    /*模拟长时间操作共享资源,导致cpu易主,产生与时间有关的错误*/ printf("world\n"); sleep(rand() % 3); } return NULL; } int main(void) { pthread_t tid; srand(time(NULL)); pthread_create(&tid, ...

    操作系统实验代码!!!!

    进程调度模拟+windows系统的多线程同步+连续可变式内存分配的模拟源代码 用C++语言编写

    JDK的sql设计不合理导致的驱动类初始化死锁问题

    在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是我们第一次调用java.sql.DriverManager.registerDriver注册一...

    JAVA实现哲学家就餐课程设计内附源代码课设报告可执行文件

    哲学家问题的模拟实现 根据哲学家问题的相关原理,用VC/Java/Python编程创建五个线程,模拟实现五个哲学家来竞争五只筷子(资源)去吃通心面的情况,必须确保五个线程的同步和互斥,并且在运行时不会产生死锁。

    银行家实验报告

    操作系统的实验报告 银行家算法!...加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握 Windows 环境下银行家算法的实现方法,同时巩固利用 Windows API进行共享数据互斥访问和多线程编程的方法。

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4 ... 第2章 Java基础类型与运算符(教学视频:39...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    Windows 系统错误代码简单分析

    Microsoft Windows 系统错误代码简单分析:  0000 操作已成功完成。  0001 错误的函数。  0002 系统找不到指定的文件。  0003 系统找不到指定的路径。  0004 系统无法打开文件。  0005 拒绝访问。...

    JAVA 范例大全 光盘 资源

    实例126 模拟下载文件(线程等待和通报) 365 实例127 家族等级(线程优先级) 368 实例128 定时器(Timer) 371 实例129 没法吃饭(死锁) 372 实例130 方便吃饭(解决死锁) 375 实例131 查看JVM中所有的线程...

    java范例开发大全

    实例243 模拟人工服务台(线程连接池) 466 13.6 线程应用实例 471 实例244 下雪的村庄 472 实例245 小飞侠 474 实例246 飞流直下 477 实例247 多线程断点续传 479 实例248 滚动的珠子 485 实例249 余额查询 489 ...

    Java范例开发大全 (源程序)

     实例214 模拟操作系统的进程调度 379  实例215 利用栈将字符串逆序输出 381  实例216 动态的数组链表 382  实例217 你能猜出鱼是谁的宠物吗? 387  实例218 使用Collections类对List的排序操作 393  ...

    java范例开发大全(pdf&源码)

    实例243 模拟人工服务台(线程连接池) 466 13.6 线程应用实例 471 实例244 下雪的村庄 472 实例245 小飞侠 474 实例246 飞流直下 477 实例247 多线程断点续传 479 实例248 滚动的珠子 485 实例249 余额查询 489 ...

Global site tag (gtag.js) - Google Analytics