具体代码,需要设置类的变量,不能设置方法的局部变量
package com.xxx.vman.service;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Test2 {
private static Semaphore semaphore = new Semaphore(3);
private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(10,50,60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(200));
@SneakyThrows
static void exec(){
try {
semaphore.acquire();
log.info("执行exec方法" + Thread.currentThread().getName());
Thread.sleep(310);
} finally {
semaphore.release();
}
}
@Test
@SneakyThrows
public void test(){
for (;;){
Thread.sleep(100);
executorService.execute(() -> exec());
}
}
}
arthas监控查看executorService属性命令
ognl -x 3 '@com.xxx.vman.service.Test2@executorService'
查看Test2类对象的属性命令
vmtool -x 3 --action getInstances --className com.xxx.vman.service.Test2 --express 'instances[0]'
Java并发控制与Arthas监控在Test2类中的应用,
本文介绍了如何在Test2类中使用Semaphore实现线程同步,以及如何使用Arthas工具监控ThreadPoolExecutor的属性。通过实例展示了并发编程和性能监控在Java服务中的实践。
1545

被折叠的 条评论
为什么被折叠?



