首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiThreading和死锁

MultiThreading和死锁
EN

Stack Overflow用户
提问于 2009-07-07 10:54:22
回答 4查看 596关注 0票数 1

建议我任何实时情况下,我应该创建多个线程,然后介绍一个死锁situation.this是一种项目!你能帮助应用程序对一些实时情况更感兴趣吗?

EN

回答 4

Stack Overflow用户

发布于 2009-07-07 10:59:48

想想哲学家,金叉子和一大碗意大利面

票数 5
EN

Stack Overflow用户

发布于 2009-07-07 11:08:35

这将导致死锁:

代码语言:javascript
复制
public static void main(String[] args) 
{
  final Object object1 = new Object();
  final Object object2 = new Object();

  Thread thread1 = new Thread(
    new Runnable() 
    {
      public void run() 
      {    
        try 
        {    
          //**** Lock on object1 first ****
          synchronized(object1) 
          {    
            Thread.sleep(1000);

            //**** Lock on object2 second ****
            synchronized(object2) 
            {
              System.out.println("Should never get here.");
            }
          }
        }
        catch (InterruptedException e) 
        {    
          System.out.println("Thread interupted.");
        }
      }
    }
  );

  Thread thread2 = new Thread(
    new Runnable() 
    {
      public void run() 
      {
        try 
        {
          //**** Lock on object2 first ****
          synchronized(object2) 
          {    
            Thread.sleep(1000);

            //**** Lock on object1 second ****
            synchronized(object1) 
            {
              System.out.println("Should never get here.");
            }
          }
        }
        catch (InterruptedException e) 
        {
          System.out.println("Thread interupted.");
        }
      }
    }
  );

  thread1.start();
  thread2.start();
}

基本上,你有两个线程竞争同一个对象上的锁。线程1获得了object1上的锁,而线程2获得了object2上的锁,然后每个线程都试图获得另一个对象上的锁,而你得到了一个死锁,因为另一个线程已经拥有了这个锁。

票数 2
EN

Stack Overflow用户

发布于 2009-07-07 11:03:22

您可以使用生产者-消费者算法来演示多线程。

报告生成器场景是,每个报告的数据被插入到一个队列中,以便由一个服务(生产者)进一步处理。报表处理器服务(使用者)从队列中获取报表的数据,并一次处理一个报表。报表处理器服务可以有5个不同的实例。它们都使用来自单个队列的报告(这是您可能需要在队列上引入锁的地方,等等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1091655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档