关于java线程抢占式调度的几个问题。
Closed this issue · 0 comments
Wrecksoul commented
- java的线程切换会不会发生在一个任意时刻:比如我覆盖Thread的
run
方法写了一个方法,我们执行start()
方法之后它就具备执行条件了,一旦它开始执行,这个方法会不会执行到一半,然后所谓的“时间片”到了,然后切换到其他线程执行。还是说,只有Object.wait
方法sleep
这样的方法才会让他失去cpu时间片。或者我们在编写java程序的时候不需要考虑时间片?所谓的时间片对我们没有影响?(感觉知识都学杂了) - 线程池的问题,线程池里面有所谓的java线程,这里的线程我们可以设置很多,但是cpu的实际线程数很少,是怎么个对应关系呢。《深入理解Java虚拟机:JVM高级特性与最佳实践》里面提到sun的java虚拟机在1.2之后在win和linux平台上都是使用1:1的线程模型。但是我们把线程池一般都设置的比cpu的多,这里又是怎么个对应关系呢?
- 开始我对Runnable接口的理解是实现了这个接口的类,不是一个线程而是一个待执行的任务,而Thread是代表了一个java线程。但是我后来慢慢的感觉Thread和Runnable一样也是一个任务,真正的线程我们通过java代码是接触不到的。
请对应条目,分别说明。