onlyliuxin / coding2017

218 stars 643 forks source link

关于java线程抢占式调度的几个问题。 #587

Closed Wrecksoul closed 6 years ago

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

请对应条目,分别说明。