java 的线程和linux的线程并非一一对应

下面来验证一下

Hello.java

import java.lang.Runnable;
import java.lang.Thread;
public class Hello implements Runnable{
    public void run() {
        while(true) {
            try{
            Thread.sleep(100);
            }catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("I'm ok");
        }
    }
    public static void main(String []args){
        new Thread(new Hello()).start();
        new Thread(new Hello()).start();
    }
}    

启动程序以后,在java虚拟机中将产生两个线程(主线程结束以后)

而在linux中查看的结果如下:

可见在linux中对应的是11个线程,我猜测这是因为java 虚拟机本身也要使用大量线程,如垃圾回收等等。


aotian@aotian-laptop:~/test/java_test$ ps -ef | grep java
aotian    2605  2328  0 09:37 pts/0    00:00:06 java Hello
aotian    2879  2618  0 09:51 pts/1    00:00:00 grep --color=auto java


aotian@aotian-laptop:~/test/java_test$ ps -o nlwp,lwp,pid,lstart,cmd -Lp 2605
NLWP   LWP   PID                  STARTED CMD
  11  2605  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2606  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2607  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2608  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2609  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2610  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2611  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2612  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2613  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2614  2605 Wed Jul  3 09:37:12 2013 java Hello
  11  2615  2605 Wed Jul  3 09:37:12 2013 java Hello

十分有趣的是,当我把java虚拟中的线程增加到3个时,linux中对应的线程数变为12。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值