当A线程将B线程唤醒后,A线程是否同时也会将CPU的执行权让给B,还是谁竞争到CPU的执行权谁就执行?多线程竞争

解决方案 »

  1.   

    谁竞争到CPU的执行权谁就执行
      

  2.   

    B被唤醒后,不会马上进入执行状态,而是先处于就绪太,被处理机调度后由 cpu分配资源,进入执行态。
      

  3.   

    +1。notify只是唤醒某个wait和线程去参与cpu资源的竞争,多个线程之间的竞争到cpu的机会是均等的(当然也不一定,至少都有这个权利)。对于谁得到cpu的执行权,就看他们谁得到了cpu资源了
      

  4.   

    唤醒只是进入runnable状态,只有获取CPU后才会执行
      

  5.   

    楼上面说的都大同小异,反正唤醒后不可能达到运行状态,它会从等待状态到可运行或就绪状态,他们的执行,就得看cpu的心情了
      

  6.   

    当然是谁先争取到CPU谁就有时间有权利去执行。
      

  7.   

    当一个线程被唤醒后,他只能处于就绪状态,如果没有对线程设置优先记得话,线程默认的优先级是5,也就是所有线程优先级是一致的,至于随先执行,这个又CPU来决定,他会一人分配一个时间片来处理线程。
      

  8.   

    竞争。 除非A线程也进入wait()状态。
      

  9.   

    A线程唤醒B线程后,B线程进入就绪等待态,等待CPU分配执行时间,A和B竞争,谁先竞争到cpu谁先执行。
      

  10.   

    那有什么方法能保证A notify B后B立即得到控制权并开始执行呢?
      

  11.   

    谁竞争到CPU的执行权谁就执行
      

  12.   

    1)线程A必须有欲调用的实例的锁定才能执行notify方法。
    2)被notify唤醒的线程并不是在notify的那一瞬间就开始执行,因为在notify的那一瞬间,执行notify的那个线程还握着锁不放,所以其他线程无法获取该实例的锁定。
    (notify之后,线程进入阻挡(阻塞)状态,但是已从wait set中取出)
    3) 假设执行notify方法时,wait set 里正在等候的线程不只是一个。规范里并没有注明此时该选择哪一个线程。,程序属性最好不因所选线程而变动。
    4) 一般较稳妥的做法是选取notifyAll()方法、选取notify的话,因为要唤醒的线程比较少,程序处理速度当然比notifyAll略胜一筹。但若这部分处理地不好,程序可能会有程序挂掉的危险。
      

  13.   

    A线程把B线程唤醒,就是解除了B线程的冻结状态,B线程可以和A线程可以一起抢夺CPU。