多线程——线程池
当线程进入冻结状态是, 这个等待的线程存放在哪里呢?
线程运行的时候, 内存中会建立一个叫做线程池的,等待线程都存放在线程池中, 当notify的时候, 都是唤醒的是线程池中的线程,当线程池中有许多的线程都在等待,通常是唤醒第一被等待的线程,按照顺序来叫醒, notify()只能唤醒线程池中的第一个等待的线程,如果需要全部唤醒的话,就需要notifyAll(); 唤醒线程池中所有等待的线程(不管是本方的线程,还是另一个线程); 说明:想wait(),notify(),notifyAll(),这些都不是Thread类中的方法,而是继承来自Object类中的方法, 定义线程的,怎么定义在Object类中呢? 这里需要调用这些方法, 该线程必须拥有此对象的监视器(锁),而同步才有锁, 而且是同一个对象的锁, 而两个对象的锁是不一样的, 因此需要来标识是哪个对象的锁。 而锁是任意的对象,所以可以被任意对象调用的方法(wait(),notify(),notifyAll()),就定义在objec类中了,
|