为什么单线程java程序有这么多线程?
我有一个
java程序,它有13个线程,但只有一个是99%的CPU使用率并且已经运行了大约24小时.其他人的CPU使用率为0.0%,显示TIME为0:00.0到0:12.82,其中一个为3:51.48.该程序旨在成为单线程程序,所以我想知道为什么其他线程在那里?
他们在做什么,为什么他们显示如此少的CPU使用和TIME? 更新:我有一个我写的旧java程序(第一个程序 – 不要评判我!),这是单线程并显示相同类型的线程使用… import java.io.*; class xdriver { static int N = 100; static double pi = 3.141592653589793; static double one = 1.0; static double two = 2.0; public static void main(String[] args) { //System.out.println("Program has started successfullyn"); if( args.length == 1) { // assume that args[0] is an integer N = Integer.parseInt(args[0]); } // maybe we can get user input later on this ... int nr = N; int nt = N; int np = 2*N; double dr = 1.0/(double)(nr-1); double dt = pi/(double)(nt-1); double dp = (two*pi)/(double)(np-1); System.out.format("nn --> %dn",nr*nt*np); if(nr*nt*np < 0) { System.out.format("ERROR: nr*nt*np = %d(long) which is %d(int)n",(long)( (long)nr*(long)nt*(long)np),nr*nt*np); System.exit(1); } // inserted to artificially blow up RAM double[][] dels = new double [nr*nt*np][3]; double[] rs = new double[nr]; double[] ts = new double[nt]; double[] ps = new double[np]; for(int ir = 0; ir < nr; ir++) { rs[ir] = dr*(double)(ir); } for(int it = 0; it < nt; it++) { ts[it] = dt*(double)(it); } for(int ip = 0; ip < np; ip++) { ps[ip] = dp*(double)(ip); } double C = (4.0/3.0)*pi; C = one/C; double fint = 0.0; int ii = 0; for(int ir = 0; ir < nr; ir++) { double r = rs[ir]; double r2dr = r*r*dr; for(int it = 0; it < nt; it++) { double t = ts[it]; double sint = Math.sin(t); for(int ip = 0; ip < np; ip++) { fint += C*r2dr*sint*dt*dp; dels[ii][0] = dr; dels[ii][1] = dt; dels[ii][2] = dp; } } } System.out.format("N ........ %dn",N); System.out.format("fint ..... %15.10fn",fint); System.out.format("err ...... %15.10fn",Math.abs(1.0-fint)); } } 解决方法
引用
here和其他研究完成的讨论.
几个核心JVM线程: > Attach Listener:这是一个总是侦听其他JVM线程发送请求的线程.一个实际的例子是在分析或(我不是这个)生产级应用程序监视工具如DynaTrace的情况下. 需要注意的一点是,它将依赖于JVM实现它将启动多少以及所有核心线程,但即使Java程序被编写为单线程,JVM中也会有多个线程. Java程序可以是单线程的,但JVM(将运行用户定义的Java程序)是多线程的,并且即使从一开始就具有(至少对于最新的JVM)多个线程. 下面是运行单线程Java程序的Java HotSpot(TM)客户端VM版本24.55-b03的快照: 回答你的问题
什么部分:JVM开始出于某种目的,如上所述,如果任何分析或监视程序想要从JVM获取某些细节,JVM想要监听. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |