对JAVA单线程的一点疑惑?
--------------------编程问答-------------------- 这就是多线程啊,谁先运行完是不一定的 --------------------编程问答-------------------- 确切的说是线程的run方法执行结束时间不确定。start方法是告诉jvm,说:“我准备开启一个线程了”。而线程的run方法要依赖os/jvm的调度。
你在byte[] digest = dr.getDigest();前加一句
dr.join(); // 这个方法是等待该线程终止。
会发现再也不会报错了。
--------------------编程问答-------------------- 楼主先看一下多线程运行机制的流程图看一下吧! --------------------编程问答-------------------- Thread.start()是在主线程里面告诉JVM可以启动新线程的运行了,新线程什么时候被JVM调度和执行完是不确定的。不过可以用一个条件信号量来判断。 --------------------编程问答-------------------- 书上的话是对的。线程启动之后运行需要依赖CPU调度。多核和单核的情况还不一样 --------------------编程问答-------------------- 主线程和子线程之间有什么关系?在主线程也就是main()里面创建的子线程 dr ,我感觉应该是主线程main和子线程的dr的执行顺序已经确定了。如果是在main()中创建多个线程,那么创建的多个线程的执行顺序不定。不知我这种理解是否正确? --------------------编程问答-------------------- 主线程也是个线程,与子线程之间没有必然的先后顺序,与线程在哪里启动的没有关系。线程之间可以互相访问但不是包含关系。 --------------------编程问答-------------------- 谢谢你的回答。提问的问题我已经明白了。但是还有一个问题,JAVA对线程的调度方式是哪种方式?我记得是《JAVA编程思想》上讲的是优先级调度。所有未指定优先级的线程都是同一个优先级。是不是包括主线程main()也是这个优先级?
补充:Java , Java SE