1.sleep()时,cpu的时间片分给该线程后,cpu会怎么办?
wait()时,cpu会怎么处理?
2.InterruptedException,api上说“如果任何线程中断了当前线程”
interrupt(),api上说“测试当前线程是否中断”。他们和sleep()是什么关系?
3.sleep和interrupt相对应,wait和notify相对应,可否这样理解?

解决方案 »

  1.   

    具体的区别在线程同步的时候比较明显
    sleep()随眠时cpu会去处理其他线程但不会释放锁而wait()会
    interrupt()这种方法用于在线程sleep()时中断线程
    sleep和interrupt相对应,wait和notify相对应可以这么说
      

  2.   

    1、API有说,sleep就等wait会释放锁2、那时打断,当某线程处于阻塞阶段,可你需要它不再阻塞了,就需要打断,当打断之后,就会抛个InterruptedException3、不可以
    只能wait和notify、notifyAll对应
      

  3.   

    1.sleep时,该线程睡眠,cpu分配给其他线程运行;
    wait时,cpu也会分配给其他线程运行,
    sleep和wait都会使线程进入阻塞状态
    2.interrupt是中断线程的方法,若线程没有进入阻塞状态,调用interrupt方法只会改变该线程的中断状态,不会抛出InterruptedException,而若线程被sleep(),wait(),join()方法阻塞,调用interrupt()方法时,会抛出InterruptedException
    3.wait()和notify()对于,sleep()和interrupt()则不对应
    这是我的理解
      

  4.   

    4 楼说得很好
    从jdk 1.5开如Thread.State内部类定义了线程的六种状态NEW,RUNNABLE,BLOCKED,WAITING,TIMED WAITING,terminated,
    可以能过Thread类的getState() 方法获取
    1 处于sleep()方法的线程,所处状态是TIMED_WAITING,不带参数的wait()方法使线程处于waiting状态
    记得只有处于Runnable状态的线程才有机会获得cpu时间片
    2 如果本线程处于sleep(),join(),wait()方法时,如果其他线程获得了本线程的引用并调用interrupt() 方法,这时本线程的中断标志会被清除,并在本线程产生一个InterruptedException.
      如果本线程并没有处于以上那些方法中,其他线程获得本线程引用并调用interrupt()方法本线程的中断标志会是true.
      可以在一个while循环中不断地检测本线程的中断标志,这样是和其他线程交互的方法之一.静态方法interrupted()和非静态方法isInterrupted()都可以检测当前的中断标志,区别是静态方法会清楚中断标志
    3 就像4楼说的,sleep()与interrupt()是有一些关系,但和wait ,notify之间的关系是不同的
      

  5.   

    jdk5 引入了新的包java.util.concurrent ,多线程使用起来更方法了.
    多线程如果说难是因为它相当于一门新的语言,你无法用简单的模型和它对应.
    说它容易是因为,如果你用心去考虑下,这个概念还是容易理解的