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

来源:互联网 发布:白领 男装品牌 知乎 编辑:程序博客网 时间:2024/06/07 06:38

下面来验证一下

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。