java 支持多少线程_一个JavaVM可以支持多少个线程?

嗯,很多。

这里有几个参数。特定的VM,加上VM上通常也有运行时参数。这在某种程度上是由操作系统驱动的:底层操作系统对线程有什么支持,对它们有哪些限制?如果VM实际上使用OS级别的线程,那么好的老红线程/绿线程就是这样的。

“支持”的含义是另一个问题。如果您编写的Java程序就像class DieLikeADog {

public static void main(String[] argv){

for(;;){

new Thread(new SomeRunaable).start();

}

}

}

(不要抱怨一些语法细节,我正在喝第一杯咖啡),那么你肯定会看到成百上千的线程在运行。但创造线程的开销相对较高,调度程序的开销可能会越来越大;还不清楚是否可以让这些线程做任何有用的事情。

更新

好吧,忍不住了。这是我的小测试程序,有几个装饰:public class DieLikeADog {

private static Object s = new Object();

private static int count = 0;

public static void main(String[] argv){

for(;;){

new Thread(new Runnable(){

public void run(){

synchronized(s){

count += 1;

System.err.println("New thread #"+count);

}

for(;;){

try {

Thread.sleep(1000);

} catch (Exception e){

System.err.println(e);

}

}

}

}).start();

}

}}

基于Intel的OS/X10.5.6和Java65(见评论),这是我得到的New thread #2547

New thread #2548

New thread #2549

Can't create thread: 5

New thread #2550

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Thread.java:592)

at DieLikeADog.main(DieLikeADog.java:6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值