多线程学习笔记1

来源:互联网 发布:mac网页版qq游戏大厅 编辑:程序博客网 时间:2024/04/20 19:01
  1.     sleep()方法阻塞当前线程,但是不释放锁资源
  2.     当执行完synchronized(lock){}代码块中的内容后,自动释放锁资源
  3.     wait()方法阻塞当前线程,且释放锁资源,且只能被持有相同锁的其他线程唤醒。否则一直阻塞。
  4. notify()方法,严格按照FIFO模式,去持有相同锁的线程队列中唤醒一个线程。这有可能导致死锁。例子就是:当有2个线程的生产者,2个线程的消费者时,会出现死锁。具体:生产者1,进行生产后,进入阻塞,生产者2,判断已经生产过,进入阻塞。消费者1 进行消费后,唤醒生产者1,消费者2,判断已经消费进入阻塞。当生产者1生产后,唤醒生产者2,然后阻塞。生产者2判断已经生产过,直接进入阻塞,然后4个线程就全都阻塞了,造成了死锁,原因是没有线程能再被激活。
  5. 所以多线程时使用notifyAll()方法,能够避免出现上述中的死锁,notifyAll()方法唤醒拥有同一锁对象的所有线程。
  6. join()方法保证调用该方法的进程执行结束后,之后的其他线程才可以进行工作
  7. ThreadGroup.enumerate(Thread[] ts)方法只是复制当前线程组及其子组的引用,而不是深层拷贝,意思就是说,调用该方法后,操纵ts的成员,其实就是在操纵ThreadGroup的线程单元
0 0
原创粉丝点击