sleep()和 wait()有什么区别? 多线程有几种实现方法?同步有几种实现方法?

sleep()和 wait()有什么区别?

  1. sleep是在Thread类定义的,wait是在Object类定义的

  2. sleep有两个重载方法,wait有三个重载方法

  3. sleep能自动唤醒wait有参数的方法能自动唤醒,但无参数的重载方法不能自动唤醒,需要使用notify/notifyAll进行手动唤醒

  4. sleep挂起时,不释放锁资源,wait挂起时,会释放锁资源

  5. sleep调用时,不需要放在synchronized内,wait需要放在synchronized内

  6. sleep一般不会产生死锁,但是wait可能会产生死锁

多线程有几种实现方法?同步有几种实现方法?

  • 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

  • 同步的实现方面有五种,分别是synchronized、wait与notify、sleep、suspend、join

  1. synchronized: 一直持有锁,直至执行结束

  2. wait():使一个线程处于等待状态,并且释放所持有的对象的lock,需捕获异常。

  3. sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,需捕获异常,不释放锁。

  4. notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

  5. notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

简述synchronized和java.util.concurrent.locks.Lock的异同?

主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:

  1. Lock有更好的语义
  2. Lock有更高性能
  3. synchronized自动释放锁,Lock手动释放,并且必须在finally从句中释放。
  4. Lock功能强大,可以用tryLock方法可以非阻塞方式去拿锁

你可能感兴趣的:(面试,java)