java双线程猜数字_Java 支持多少个线程同时运行的测试 Java max running thread count test...

测试一下一个Java程序能同时造多少个线程,一起运行。直到 java.lang.OutOfMemoryError: unable to create new native thread

/**

* 测试最多能创建多少个线程

* 4076

* -Xms2g -Xmx2g -Xss512k

* -Xms10m -Xmx10m -Xss170k

*

* @author LiXuekai on 2020/7/27

*/

public class Main {

private static final ExecutorService service = Executors.newCachedThreadPool();

private static final AtomicInteger count = new AtomicInteger();

private static final CountDownLatch countDownLatch = new CountDownLatch(Integer.MAX_VALUE);

/**

* 直接造,sleep的停

*/

@Test

public void howMany0() {

while (true) {

new Thread(() -> {

System.out.println("thread " + count.addAndGet(1));

try {

TimeUnit.HOURS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

}).start();

}

}

/**

* 用池子造,sleep的停下。

*/

@Test

public void howMany1() {

int i = 0;

while (true) {

int index = i + 1;

System.out.println("......................... index is " + index);

service.execute(() -> {

try {

TimeUnit.HOURS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

});

}

}

/**

* 直接造,await。

*/

@Test

public void howMany2() {

while (true) {

new Thread(() -> {

System.out.println("thread " + count.addAndGet(1));

try {

countDownLatch.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}).start();

}

}

/**

* 这个是不带停的吧,之前创建的线程都自己死掉了。

*/

@Test

public void howMany3() {

while (true) {

new Thread(() -> {

System.out.println("thread " + count.addAndGet(1));

}).start();

}

}

}

运行结果:

e38bfd3c4a27575fac3fa13618c0fc4c.png

除了最后一个,前面的单个线程都阻塞的情况,大概都是到这个数就OOM了。

看其它文章说 -Xms -Xmx设置heap的大小以及 -Xss 设置单个stack的大小对这个数有影响,我在 -Xms 10m,1g,6g -Xss170k, 10m,100m,都是在4075左右就OOM拉。

测试环境,jdk1.8 ,mac os

理论:

操作系统对一 个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

说是这个值和环境差别很大,目前就一个测试环境,暂就这个测试结果吧。

有新发现了,再补充,还有什么招继续增加running/blocked thread count,可以指点一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值