Java线程的死锁
2014-10-31 15:14
274 查看
package com.meson.threaddeadlock.test; /* * @ meson * * 死锁的列子 * * 张三向李四要书 * 李四向张三要画 */ class Zhangsan {//张三类 //索要图书 public void say() { System.out.println("张三对李四说你给我书我把画给你"); } //得到书 public void get() { System.out.println("Zhangsan得到了书!!"); } }; class Lisi {//李四类 //索要画 public void say() { System.out.println("李四对张三说你 给我画我把书给你"); } //得到画 public void get() { System.out.println("Lisi得打了画"); } }; public class ThreadDeadLock implements Runnable{//线程类 public boolean flag = false;//一个判断标识 判断谁先说话 private static Zhangsan z = new Zhangsan(); private static Lisi l = new Lisi(); @Override public void run() {//重写run方法 // TODO Auto-generated method stub if (flag) {//true 张三先说话 synchronized (z) {//同步张三 别的程序不能操作 z.say(); //睡眠 一段时间 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } // 锁定李四 别的程序不能操作 //张三从李四手中得到画 synchronized (l){ z.get(); } } } else { synchronized (l) {//false李四先说话 同步李四 别的 不能进行操作 l.say(); //睡眠一段时间 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (z) {//得到画 同步张三才能得到张三手中的画 z.get(); } } } } public static void main(String[] args) { ThreadDeadLock d1 = new ThreadDeadLock( ); ThreadDeadLock d2 = new ThreadDeadLock(); d1.flag = true; d2.flag = false; Thread t1 = new Thread(d1); Thread t2 = new Thread(d2); //线程开始 t1.start(); t2.start(); } }
相关文章推荐
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁(图)
- Java--线程--线程控制,线程安全,线程同步,线程等待,线程交互,死锁,互斥锁,读写锁
- java知识系列之线程死锁
- java线程死锁研究
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- Java- 简单了解线程 同步线程和死锁(二)
- Java基础第十一天学习日记_线程、同步、死锁
- java线程:一个死锁的小程序
- Java线程:并发协作-死锁
- java笔记:熟练掌握线程技术---基础篇之线程的协作和死锁的问题(下)
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- java基础--线程--开启java死锁之谜-03
- Java- 简单了解线程 同步线程和死锁(二)
- java线程同步之死锁问题
- JAVA线程之七:线程的生命周期及死锁
- java 线程中线程死锁
- 如何避免Java线程死锁
- JAVA线程同步与死锁