在java多线程程序中,怎样实时找出处于等待(阻塞)状态线程、进程的个数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java多线程程序中,怎样实时找出处于等待(阻塞)状态线程、进程的个数。相关的知识,希望对你有一定的参考价值。

就是在很多没有规律的线程中,判断出哪些正在运行,哪些处于等待状态,哪些已经dead

线程的最大好处就是可以共用同一个内存块。

你只要定义一个静态的变量,给所有线程读写操作。你就能统计这些了。
参考技术A class Example1 extends Thread
boolean stop=false;
public static void main( String args[] ) throws Exception
Example1 thread = new Example1();
System.out.println( "Starting thread..." );
thread.start();
Thread.sleep( 3000 );
System.out.println( "Interrupting thread..." );
thread.interrupt();
Thread.sleep( 3000 );
System.out.println("Stopping application..." );
//System.exit(0);

public void run()
while(!stop)
System.out.println( "Thread is running..." );
long time = System.currentTimeMillis();
while((System.currentTimeMillis()-time < 1000))


System.out.println("Thread exiting under request..." );



你输出后会看到的追问

我的意思是在很多没有规律的线程中,判断出哪些正在运行,哪些处于等待状态,哪些已经dead

Java多线程之线程状态总结

概述

线程大家肯定不陌生,对于线程中的运行状态,自己经常搞混淆,这边按照下图记录下:

技术分享图片

线程一般来说有如下几种状态:

新建,可运行,超时阻塞,等待阻塞,同步阻塞,死亡

yeild:当线程执行了yield()方法后,将转到就绪状态,yield()方法只会给相同优先级或者更高优先级的线程一个运行的机会,与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态,yield()方法没有声明抛出任何异常

sleep:sleep()方法会给其他线程运行的机会,而不考虑其他线程的优先级,因此会给较低线程一个运行的机会,sleep()方法声明抛出InterruptedException异常,sleep方法并不会释放占用的资源。

join:阻塞当前线程,等待其他线程执行完毕,不会释放占用的资源

wait:调用wait 方法后,它就进入到一个和该对象相关的等待池中,同时失去了对象的锁,只有notify能够唤醒,等待获取锁,继续执行。

以上是关于在java多线程程序中,怎样实时找出处于等待(阻塞)状态线程、进程的个数。的主要内容,如果未能解决你的问题,请参考以下文章

java多线程总结

Java多线程程序设计初步入门

(转) Java多线程中start()和run()的区别

Java多线程编程,怎样实现线程间数据的传递?

java中 举个线程阻塞的例子

线程的状态