`
Mybeautiful
  • 浏览: 298911 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

得到当前系统中所有线程的办法

阅读更多

    有时候我们希望找到系统中的所有线程,有没有什么办法呢?是可以做到的,代码如下:

	public static Thread[] findAllThreads() {
		ThreadGroup group = Thread.currentThread().getThreadGroup();
		ThreadGroup topGroup = group;

		// Found the root thread group
		while (group != null) {
			topGroup = group;
			group = group.getParent();
		}
		// The num of activated threads 
		int estimatedSize = topGroup.activeCount() * 2;
		Thread[] slackList = new Thread[estimatedSize];
		// Get all sub thread of the root thread group
		int actualSize = topGroup.enumerate(slackList);
		// copy into a list that is the exact size
		Thread[] list = new Thread[actualSize];
		System.arraycopy(slackList, 0, list, 0, actualSize);
		return list;
	}

 

 

  代码比较简单,就不加解释了。

1
1
分享到:
评论
4 楼 buptwhisper 2011-03-17  
Mybeautiful 写道
buptwhisper 写道
这也太麻烦了吧,而且得到的java线程。
Thread中有一个native的getAllThread方法,这个就可以得到所有的线程(java线程),只是它是private的,不能直接调用,但是你可以变一下嘛,查看一下getAllThread本身是在哪里调有的,一看哦,getAllStackTraces就调用了它,且返回的是一个key为Thread的map,这不就是你要的么。

学习了,这个点子确实不错,是个新的办法,不过有两点值得商榷,
1. 如果你只想要所有的Threads,可能你还是会写个方法再封装一下。
2. 不知道效率是不是略低一点点,因为没有得到了每一个Thread的StackTrace。


这个可以简单封装一下,效率嘛,应该不是很低,看一下getAllStackTraces方法就知道了。实质上它调用的只是两个native的方法并封装了一下。
3 楼 Mybeautiful 2011-02-25  
buptwhisper 写道
这也太麻烦了吧,而且得到的java线程。
Thread中有一个native的getAllThread方法,这个就可以得到所有的线程(java线程),只是它是private的,不能直接调用,但是你可以变一下嘛,查看一下getAllThread本身是在哪里调有的,一看哦,getAllStackTraces就调用了它,且返回的是一个key为Thread的map,这不就是你要的么。

学习了,这个点子确实不错,是个新的办法,不过有两点值得商榷,
1. 如果你只想要所有的Threads,可能你还是会写个方法再封装一下。
2. 不知道效率是不是略低一点点,因为没有得到了每一个Thread的StackTrace。
2 楼 buptwhisper 2011-02-24  
这也太麻烦了吧,而且得到的java线程。
Thread中有一个native的getAllThread方法,这个就可以得到所有的线程(java线程),只是它是private的,不能直接调用,但是你可以变一下嘛,查看一下getAllThread本身是在哪里调有的,一看哦,getAllStackTraces就调用了它,且返回的是一个key为Thread的map,这不就是你要的么。
1 楼 wangxiaoxu 2010-09-27  
不错,学习了

相关推荐

    linux系统编程之线程.zip

    在不同的系统中thread_t这个类型有不同的实现,它可能是一个整数值,也可能是一个结构体,也可能是一个地址,所以不能简单地当成整数用printf打印,调用pthread_self(3)可以获得当前线程的id。 attr参数表示线程属性...

    C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现

    在示例中,`poolFlag`是一个计数器,用于记录当前正在运行的线程数。`Interlocked.Increment(ref poolFlag)`会原子地增加`poolFlag`的值,而`Interlocked.Decrement(ref poolFlag)`则会原子地减少`poolFlag`的值。 ...

    多线程单例模式并发访问

    这是因为`start()`方法会使得线程进入就绪状态,而`run()`方法则是在当前线程中执行,不会启动新的线程。 #### 五、多线程安全问题 多线程安全问题主要出现在共享资源的访问上。当多个线程同时访问相同的资源(共享...

    Python多线程编程的实践指南.docx

    根据提供的文档信息,本文主要介绍了Python中的多线程编程实践指南。尽管文档标题与内容存在不一致(标题提及了“Python多线程编程的实践指南”而内容却涉及到了Matlab),这里我们将聚焦于Python多线程编程的相关...

    iOS中的线程死锁实例详解

    当两个或更多的线程在执行过程中,每个线程都持有至少一个资源,并且等待其他线程释放它们所持有的资源,这样就形成了一个循环等待状态,导致所有线程都无法继续执行,这就称为线程死锁。 线程死锁发生的条件包括四...

    操作系统概论填空题总结.doc

    7. 中断处理是操作系统的重要功能,中断时计算机暂停当前任务,转而处理中断事件,处理完后恢复原任务。 8. 计算机活动常常由定时器驱动,例如时钟中断处理程序每间隔一定时间执行,用于调度和其他系统任务。 9. ...

    linux服务器找到占用cpu高的java代码的办法

    1. **查看系统资源状态**:首先,我们需要了解当前系统资源的使用情况。可以使用`top`或`htop`命令查看CPU使用率最高的进程。通过这些工具,我们可以看到哪个Java进程(通常以`java`或`jvm`显示)占用了大量CPU资源...

    Java并发 线程间的等待与通知

    Java并发编程中的线程间等待与通知是多线程编程中的关键概念,主要用于线程间的协作和同步。本文将深入探讨Java中`Object`类的`wait()`和`notify()`方法,以及`java.util.concurrent.locks.Condition`接口提供的`...

    C:\Users\Administrator\.gradle\caches\jars-1\cache.properties (系统找不到指定文件)解决办法

    - 如果以上方法均无效,可以考虑将`.gradle`文件夹移动到其他位置,如个人文件夹中,从而避免与系统权限相关的冲突。 - 在`.gradle/gradle.properties`文件中设置`org.gradle.user.home`属性来指定新的位置。 ...

    aix系统性能管理及oracle案例分析.docx

    - 示例中,CPU空闲时间较高(`id`), 无线程等待(`r`), I/O压力较小(`wa`), 内存充足(`fre`), 表明当前系统性能良好。 ##### 2. sar 命令 **常用格式**: ``` # sar 1 2 AIX jsdxh_db02 3500 C2C1EB4C 0010/24/07 ...

    Java高并发笔记.pdf

    - **解决办法**:采用公平的调度算法,确保每个线程都能得到合理的机会。 **活锁(Livelock)** - **定义**:活锁是指两个或多个线程不断重复尝试解决问题,但结果是没有进展的情况。与死锁不同的是,活锁中的线程并...

    自动连接指定wifi(无密码方式错误解决办法).docx

    文档标题提到的是“自动连接指定WiFi的无密码方式错误解决办法”,这通常涉及到Android系统中对WiFi连接的管理。在Android设备上,我们可以通过编程方式使用`WifiManager`类来控制WiFi连接,包括查找、连接WiFi网络...

    嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)

    1. **利用QT的线程库函数**:通过编程的方式,在确保所有资源得到释放和清理后,终止当前应用,然后再重新启动。这通常涉及到复杂的线程管理和状态保存,可能需要对QT的事件循环和线程模型有深入理解。然而,这种...

    delphi 错误大全

    确认所有使用的库或对象文件都是针对当前版本的 Delphi 编译器设计的,并且与 32 或 64 位兼容。 #### 486/487 instructions not enabled **错误描述:** 编译器无法使用 486/487 指令集。 **解决办法:** 检查...

    超级有影响力霸气的Java面试题大全文档

    1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...

    倒计时防刷新代码

    "倒计时防刷新代码"是为了确保用户体验的公平性和系统的安全性,避免用户利用刷新页面的手段获得额外的时间或者多次尝试的机会。以下是对这个主题的详细阐述: 首先,我们需要理解的是Web应用程序的工作原理。每当...

    VC6.0中若干实用小技巧

    若要在控制台应用中使用MFC类库,需在Project Settings中,选择C/C++选项的Code Generation,将Use Run-Time Library设置为Multi-threaded DLL或Multi-threaded Debug DLL,以确保与MFC的多线程特性兼容。...

    WOSA3.0标准错误码

    为了帮助开发者更好地理解并处理系统中的异常情况,WOSA 定义了一系列错误码,以便于进行错误定位和调试。 #### 公共错误码详解 公共错误码主要涵盖了与WOSA框架本身相关的常见问题,包括但不限于版本冲突、配置...

Global site tag (gtag.js) - Google Analytics