java模拟线程死锁

 

/*
java线程死锁的模拟
两个线程同时请求对方的对方释放监视对象 造成死锁
请在 虚拟机 单核下运行
*/

class  Test 
{
 public static void main(String []args)  throws Exception
   {
     ThreadOne td=new ThreadOne();
     new Thread(td).start();
     Thread.sleep(3);
     new Thread(td).start();
   }
}
class ThreadOne  implements Runnable
{
 
 
 int tickets=100;
 Object obj=new Object();
 boolean b=false;
 public void run()
 {
  if(b==false)
  {
   while(true)
    sell();
  }
  else
  {
   while(true)
   {
    synchronized(obj)
    {
     try
     {
      Thread.sleep(10);
     }
     catch(Exception e)
     {
      e.printStackTrace();
     }
     synchronized(this)
     {
      if(tickets>0)
      {
       
       System.out.println("obj:"+Thread.currentThread().getName()+
         " sell tickets:"+tickets);
       tickets--;
      }
     }
    }
   }
  }
 }
 public synchronized void sell()
 {
  synchronized(obj)
  {
   if(tickets>0)
   {
    try
    {
     Thread.sleep(10);
    }
    catch(Exception e)
    {
     e.printStackTrace();
    }
    System.out.println("sell():"+Thread.currentThread().getName()+
      " sell tickets:"+tickets);
    tickets--;
   }
  }
 }
 
 
 
 
}

时间: 2024-12-07 16:41:09

java模拟线程死锁的相关文章

java 进程死锁-java 模拟线程死锁实验

问题描述 java 模拟线程死锁实验 我想两个线程一直在售票知道票卖光,但是用while()控制循环后出现 售票2进入共享区 当前没有车票可以出售! 售票2进入共享区 当前没有车票可以出售! 售票2进入共享区 ..... 具体代码如下 package com; public class SaleThread extends Thread{ private String name; ShareResource shareresource; public SaleThread(){} public

java的线程死锁

由于线程可能进入堵塞状态,而且由于对象可能拥有"同步"方法--除非同步锁定被解除,否则线程不能访问那个对象--所以一个线程完全可能等候另一个对象,而另一个对象又在等候下一个对象,以此类推.这个"等候"链最可怕的情形就是进入封闭状态--最后那个对象等候的是第一个对象!此时,所有线程都会陷入无休止的相互等待状态,大家都动弹不得.我们将这种情况称为"死锁".尽管这种情况并非经常出现,但一旦碰到,程序的调试将变得异常艰难. 就语言本身来说,尚未直接提供防

深入JVM剖析Java的线程堆栈_java

在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因.在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术.在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息. 我的目标是分享我过去十几年来在线程分析中积累的知识和经验.这些知识和经验是在各种版本的JVM以及各厂商的JVM供应商的深入分析中获得的,在这个过程中我也总结出大量的通用问题模板. 那么,准备好了么,现在就把这篇文章加入书签,在后续几周中我会给大家带来这一系列的专

JAVA实现线程等待提示框

Java语言从其诞生到现在不过短短五年时间,却已经成为全球最热门的语言,Java程序员正成为IT业其它程序员中薪金最高的职员.这一切都应归功于Java良好的特性:简单.面向对象.分布式.平台无关性.可移植性.支持多线程等等.本文将用Java的多线程特性来实现线程等待提示框. 1 问题的提出 在Java应用程序编程中,有时需要在GUI(图形化用户界面)中处理一些占用系统资源较多,耗费时间较长的事务,例如:与数据库进行大批量数据交换.大数据量的复杂运算.远程连接服务器等等.系统在处理这些事务时,如果

线程死锁的质疑

问题描述 在网上搜到一篇线程死锁的博客,后来发现,两个线程并不会发生死锁.我的理由是Threadthread01=newThread(run01);Threadthread02=newThread(run02);这两个线程构造函数传进来的参数Runnable对象run01,run02,会分别创建obj1.obj2,也就说两个线程通过synchronized(obj1)和synchronized(obj2)并不能实现互斥.[/color]packagecn.thread;publicclassTh

java多线程中死锁情况的一个示例

 下面是死锁情况的一个示例代码 [java] view plaincopy package com.qust.demo.money;      class A {          public synchronized void foo(B b) {           System.out.println(Thread.currentThread().getName() + " 进入A的foo");           try {               Thread.slee

java用线程实现简单的定时器功能。能定时能停止

问题描述 java用线程实现简单的定时器功能.能定时能停止 本来用定时器timer 和 timertask 已经实现,但是 老师要求用 线程自己模拟 求大神指点 解决方案 用线程实现定时器功能用线程实现简单的定时器

synchronized-Java的一个简单线程死锁问题

问题描述 Java的一个简单线程死锁问题 class BadPerson { public synchronized void say(GoodPerson good) { System.out.println(""把钱给我,放了你的人.""); good.give(); } public synchronized void give() { System.out.println(""得到了钱,同时被警察抓了.""); }}c

Java中线程用法总结_java

本文实例总结了Java中线程用法.分享给大家供大家参考.具体分析如下: 1.线程是基本调度单元.共享进程的资源,如内存和文件句柄.但有自己的pc(程序计数器),stack(线程栈)及本地变量 2.线程的优势: a) 充分利用多处理器 b) 可以简化模型.特定任务给特定线程.如servlets及rmi等框架. c) 对异步事件的简单处理.如socket,nio使用更复杂.而现在的操作系统支持更大数量的线程. d) 界面的更佳响应 3.内部锁:synchronized块.互斥.可重入(reentra