sleep()方法阻塞当前线程,但是不释放锁资源
当执行完synchronized(lock){}代码块中的内容后,自动释放锁资源
wait()方法阻塞当前线程,且释放锁资源,且只能被持有相同锁的其他线程唤醒。否则一直阻塞。
notify()方法,严格按照FIFO模式,去持有相同锁的线程队列中唤醒一个线程。这有可能导致死锁。例子就是:当有2个线程的生产者,2个线程的消费者时,会出现死锁。具体:生产者1,进行生产后,进入阻塞,生产者2,判断已经生产过,进入阻塞。消费者1 进行消费后,唤醒生产者1,消费者2,判断已经消费进入阻塞。当生产者1生产后,唤醒生产者2,然后阻塞。生产者2判断已经生产过,直接进入阻塞,然后4个线程就全都阻塞了,造成了死锁,原因是没有线程能再被激活。
所以多线程时使用notifyAll()方法,能够避免出现上述中的死锁,notifyAll()方法唤醒拥有同一锁对象的所有线程。
join()方法保证调用该方法的进程执行结束后,之后的其他线程才可以进行工作
ThreadGroup.enumerate(Thread[] ts)方法只是复制当前线程组及其子组的引用,而不是深层拷贝,意思就是说,调用该方法后,操纵ts的成员,其实就是在操纵ThreadGroup的线程单元
多线程学习笔记1
最新推荐文章于 2024-03-12 13:05:39 发布