具体代码,需要设置类的变量,不能设置方法的局部变量
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]'