有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java死锁线程检查

有人能告诉我如何在Java多线程应用程序中找出“有多少线程处于死锁状态”吗?找出死锁线程列表的方法是什么

我听说过线程转储和堆栈跟踪,但我不知道如何实现它

  • 我还想知道Java5在线程方面引入了哪些新特性

请让我知道你的意见和建议


共 (4) 个答案

  1. # 1 楼答案

    在进程id上使用kill-3

    这将向控制台打印线程转储和线程争用概述

  2. # 2 楼答案

    如果您想了解Java 5中新的并发特性,您可以做得比获得Brian Goetz(Brian Goetz和许多合作者设计了Java 5并发库)的Java Concurrency in Practice副本差得多。它具有高度的可读性和权威性,并结合了实际例子和理论

    executive summary of the new concurrent utilities如下:

    • 任务调度框架-Executor框架是根据一组执行策略标准化异步任务的调用、调度、执行和控制的框架。提供的实现允许在提交线程、单个后台线程(如Swing中的事件)、新创建的线程或线程池中执行任务,并且开发人员可以创建一个支持任意执行策略的执行器。内置实现提供可配置的策略,如队列长度限制和饱和策略,这些策略可以通过防止失控的资源消耗来提高应用程序的稳定性
    • 并发集合-添加了几个新的集合类,包括新的Queue和BlockingQueue接口,以及Map、List和Queue的高性能并发实现
    • 原子变量-用于原子操作单个变量(基元类型或引用)的类,提供高性能的原子算法以及比较和设置方法。原子变量在java中的实现。util。同时发生的atomic提供了比使用同步(在大多数平台上)更高的性能,这使得它们对于实现高性能并发算法以及方便地实现计数器和序列号生成器非常有用
    • 同步器-通用同步类,包括信号量、互斥体、屏障、锁存器和交换器,用于促进线程之间的协调
    • 锁-虽然锁定是通过synchronized关键字内置到Java语言中的,但内置监视器锁有许多不方便的限制。爪哇。util。同时发生的locks包提供了一个高性能的锁实现,它具有与同步相同的内存语义,但它还支持在尝试获取锁时指定超时、每个锁有多个条件变量、非词汇范围的锁,以及支持中断等待获取锁的线程
    • 纳秒级粒度计时-系统。nanoTime方法允许访问纳秒粒度的时间源以进行相对时间测量,并且接受超时的方法(例如BlockingQueue.offer、BlockingQueue.poll、Lock.tryLock、Condition.await和Thread.sleep)可以以纳秒为单位获取超时值。系统的实际精度。nanoTime依赖于平台
  3. # 3 楼答案

    获取线程转储的方法:

    • 在Linux/UNIX上,ctrl-break(Windows)或ctrl-\,可能是ctrl-4和kill -3
    • jstack和您的进程id(使用jps
    • jconsolevisualvm
    • 几乎所有的调试器

    J2SE 5.0中的主要新线程功能(2004年发布,在使用寿命期结束时):

    • java.util.concurrent
    • 新的Java内存模型
  4. # 4 楼答案

    在程序中,ThreadMXBean类有一个方法findMonitorReadLockedThreads(),以及查询线程当前堆栈跟踪的方法。在Windows中的控制台中,执行Ctrl+Break可提供堆栈跟踪列表,并指示死锁线程

    除了对Java内存模型进行了一些调整,清理了一些并发“漏洞”,Java 5最重要的特性是它向程序员公开了比较和设置(CAS)操作。然后,在此基础上,平台中提供了大量并发实用程序。确实有很多东西,但它们包括:

    • 并发集合
    • 执行器,它有效地允许您实现线程池之类的东西
    • 其他常见的并发结构(队列、锁存、屏障)
    • 原子变量

    你可能对我写的一些关于Java 5 concurrency features的教程感兴趣