「线程监控java」线程监控 linux
本篇文章给大家谈谈线程监控java,以及线程监控 linux对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java 怎么监控linux上线程是否存在
CPU资源时,按照以下步骤进行查找:
(一):通过【 top -p 12377 -H】 查看java进程的有哪些线程的运行情况;
和通过【jstack 12377 stack.log】生成Java线程的dump详细信息;
先用top命令找出占用资源厉害的java进程id,如图:# top
如上图所示,java的进程id为’52554′,接下来用top命令单独对这个进程中的所有线程作监视:
1 top -p 52554 -H
# top视图里面里面可以通过快捷键依次b ,x高亮显示top的列找出需要的线程,默认CPU排序,Sh
java如何监控线程是否在运行
判断是否在运行用isAlive方法哈。。
给你写了个例子。。不知是不是你想要的。。
public class Thread100 {
/**
* @param args
*/
public static ThreadA ta = new ThreadA();
public static ThreadB tb = new ThreadB();
public static void main(String[] args) {
ta.start();
tb.start();
}
}
class ThreadA extends Thread {
@Override
public void run() {
int i = 0;
while(i 100) {
if(Thread100.tb.isAlive()) {
System.out.println("B is alive");
}
System.out.println(i);
i++;
}
}
}
class ThreadB extends Thread {
@Override
public void run() {
int i = 0;
while(i 100) {
if(Thread100.ta.isAlive()) {
System.out.println("A is alive");
}
System.out.println(i);
i++;
}
}
}
java 如何获得线程池中正在执行的线程数
java中线程池的监控可以检测到正在执行的线程数。
通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用
taskCount:线程池需要执行的任务数量。
completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。
largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。
getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+
getActiveCount:获取活动的线程数。
通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等。这几个方法在线程池里是空方法。如:
protected
void
beforeExecute(Thread
t,
Runnable
r)
{
}
java线程的显式同步监视器和隐式同步监视器以什么做区分的?
隐式(Synchronized)锁和显式(java.util.Lock)锁
为了控制多个线程按照正确的顺序来访问共享数据,Java提供了提供了两种锁方案
1.隐式锁(Synchronized)
这一种就是比较大家熟悉的synchronized关键字,因为Java中每个对象都实现了lock的功能,所以synchronized正是利用了这一特性,来控制并发访问.使用synchronized关键字可以保证使用同一个锁的方法或代码块在不同的线程里执行时是原子的即不可分割的(Atomic),这是通过阻塞(blocking)的方式来实现原子性,后面的文章会提到非阻塞(non-blocking)的方式实现原子操作.
public synchronized void safeMethod() {
} //Lock是该方法所属的对象
public static void safeMethod(){
} //Lock是该类的class对象
synchronized(xxxObject){
} //Lock是xxxObject
这种方法因为不能显式的对Lock对象进行各种操作,所以有很多不便性,JDK1.5引入了显式锁
2.显式锁
可以查看 java.util.,concurrent.Lock 接口,实现该接口的类提供了显式锁的功能,我们看看Lock接口
void lock(); //尝试获取锁,若得不到着等待(不可中断,类似于synchronized方式)
void lockInterruptibly() ; //可中断的尝试获取锁
boolean tryLock();尝试获取锁,不管得到与否立即返回
boolean tryLock(long time, TimeUnit unit)尝试获取锁,若得不到等到一段时间
void unlock();// 释放锁
Condition newCondition();//创建于该锁相关的条件变量,实现精确等待/唤醒
3.两者区别与联系
显式和隐式锁都能实现对共享资源的控制,两者在内存同步上是同样的机制,但是显式锁提供了更灵活更强大的接口
1.synchronized 对多个锁只能按照获得锁的顺序的反序释放(先获得后释放),显式锁可以
按照需要释放锁,无此约束.
2.显式锁提供可中断的获取锁的方法,lockInterruptibly
3.显式提供尝试获得锁方法
4.提供精度更细的等待与唤醒(利用Condition)
特别注意显式锁的 xx.lock()方法只是获取了xx对象表达的锁,并不是获取了xx内置的隐式锁,这个要注意区分,与synchronized(xx)是两回事
线程监控java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于线程监控 linux、线程监控java的信息别忘了在本站进行查找喔。
发布于:2022-12-07,除非注明,否则均为
原创文章,转载请注明出处。