1.public class MyThread extends Thread { 
2. public void run() { 
3. System.out.println(currentThread().getName()); 
4. } 
5. public static void main(String[] args) { 
6. MyThread t1 = new MyThread(); 
7. MyThread t2 = new MyThread(); 
8. try { 
9. t1.start(); 
10. Thread.sleep(10000); 
11. t2.start(); 
12. } catch (Exception e) { 
13. } 
14. 

上面程序Main线程执行到第9行,创建t1线程,但是也只是创建,并不放弃Cpu,main到第10行,放弃cup,t1执行,之后main,之后t2 
问题,上述流程是否正确?如果把run()改成循环10000000次,那么main执行到第10行,开始执行t1线程的时候,是不是main的等t1循环完1000000次后才能获得CUP
问题补充:sleep休息了10秒,假设run全部循环完要30秒,那么在第10秒--30秒之间,main线程能获得cup的控制权吗? 
java的多线程机制是分时还是分工的?

解决方案 »

  1. 一个线程可以start几次?LZ还请多看看书。
      

  2. 你上面分析的执行过程跟一个线程没什么区别,还是按照代码的先后顺序执行啊!多线程是并行的(给人感觉上,因为CPU处理速度太快),主线程不会在线程t1执行过程中而等待他执行完再向下执行而是继续向下执行,这就是所谓的多线程,不过CPU在一个时刻还是只能对一个线程进行运算处理,它是分时间片的,一个线程的时间片用完了,就会转去执行另外就绪的线程,你补充的哪个问题当然是分时的了
      

  3. 是分时间片的,比如你把run里面改成1000000次,但是一个时间片比如只够out.print1000次,那么在t1输出了10秒+至多1000次后,main重新获得cpu,然后t2进入start。一个线程start了不等于马上获得cpu,只是这个线程转换为prepared状态。
      

类似问题 »