import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* -Xms150m -Xmx150m -XX:+PrintGCDetails 采用此种方式,内存不足,会导致心跳线程停止工作
* -Xms150m -Xmx1500m -XX:+PrintGCDetails 采用此种方式,内存充足,不会导致心跳线程停止工作
*/
public class PoolMain {
static List<byte[]> list = new ArrayList<>();
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("日志记录线程执行了");
}
}, 0, 3, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("监控线程执行了");
}
}, 0, 20, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void run() {
try {
byte[] bytes = new byte[1024 * 1024 * 10];//模拟线程运行时需要的内存
System.out.println("心跳线程执行了. " + bytes.length + "--时间:" + sdf.format(new Date()));
} catch (Exception e) {
System.out.println("进入心跳线程异常-----------------");
e.printStackTrace();
}
}
}, 0, 5, TimeUnit.SECONDS);
for (int i = 0; i < 150; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("循环次数"+i);
byte[] bytes=new byte[1024 * 1024];
list.add(bytes);
}
System.out.println("main线程执行完成了");
}
}