Map<Thread, StackTraceElement[]> maps = ThreadgetAllStackTraces();
获取所有线程堆栈,你可以通过maps中的keySet()中获取Thread对象,并调用它的interrupt方法中止。
通过调用ThreadgetState()方法获取当前线程的状态。以下是我的代码,可以直接编译运行。
public class Test {
public static void main(String[] args) {
new NewThread()start(); //启动线程
}
}
class NewThread extends Thread{
public NewThread() {
super("NewThread"); //定义当前线程的名称为NewThread
}
@Override
public void run() {
Systemoutprintln("当前线程:"+currentThread()getName()+"运行状态为:"+getState()); //打印线程的运行状态
}
}
ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。
1、 NSThread:
调用方法如下:如果需要函数参数的话,可以通过Object传递。
11:[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];
12:NSThread myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];
[myThread start];
13: [obj performSelectorInBackground:@selector(threadMe) withObject:nil];
2、 NSOperation:
NSOperation也是多线程的一种,NSOpertaion有2种形式
(1) 并发执行
并发执行你需要重载如下4个方法
//执行任务主函数,线程运行的入口函数
- (void)start
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
- (BOOL)isFinished
比如TestNSOperation:NSOperaion 重载上述的4个方法,
声明一个NSOperationQueue, NSOperationQueue queue = [[[NSOperationQueue alloc ] init] autorelease];
[queue addOperation:testNSoperation];
它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API 文档。
(2)非并发执行
-(void)main
只需要重载这个main方法就可以了。
3、 GCD
GCD很强大,我的使用经验很少。但是scorpiozj 总结的比较全面
获取线程名字这件事情本质上和Runnable是没有关系的。一个Runnable可以给多个线程去运行,所以如果在这个概念上你有误解的话,希望重新考虑一下。
另外,在任何时候,你都可以用ThreadcurrentThread()getName()来获取当前线程的名字
根据线程名称找到线程,在java中是可以实现的,实现步骤是:
1、首先获取Java VM中当前运行的所有线程
以下代码是用数组返回Java VM中当前运行的所有线程
public static Thread[] findAllThreads()
{
ThreadGroup group = ThreadcurrentThread()getThreadGroup();
ThreadGroup topGroup = group;
/ 遍历线程组树,获取根线程组 /
while ( group != null )
{
topGroup = group;
group = groupgetParent();
}
/ 激活的线程数加倍 /
int estimatedSize = topGroupactiveCount() 2;
Thread[] slackList = new Thread[estimatedSize];
/ 获取根线程组的所有线程 /
int actualSize = topGroupenumerate( slackList );
/ copy into a list that is the exact size /
Thread[] list = new Thread[actualSize];
Systemarraycopy( slackList, 0, list, 0, actualSize );
return (list);
}
2、遍历线程,比对名称,找到需要寻找的线程
以下代码可得到线程的名称
String name = threadgetName();以上就是关于如何获得当前进程拥有的线程数全部的内容,包括:如何获得当前进程拥有的线程数、用c语言 java 来获取当前(进程)线程状态、ios 怎么获取当前的线程数目等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)