1、多线程有几种实现方案,分别是哪几种?

  • 继承 Thread 类
  • 实现 Runnable 接口
  • 通过线程池,实现 Callable 接口

2、同步有几种方式,分别是什么,并分别说出其同步锁对象?

  • 同步代码块 ==> 同步锁对象为:任意对象
  • 同步方法 ==> 同步锁对象为:this
    静态同步方法 ==> 同步锁对象为:本类名.class

3、启动一个线程时 run() 还是 star() , 说说他们的区别?

  • star():用来启动线程,并调用线程中的 run() 方法
  • run():执行该线程对象要执行的任务

4、sleep() 和 wait() 方法的区别?

  • sleep():不释放锁对象,释放 CPU 使用权,在休眠的时间内不能唤醒
  • wait():释放锁对象,释放 CPU 使用权,在等待时间内,能唤醒

5、为什么 wait()、notify()、notifyAll() 等方法都定义在 Object 类中

  • 因为这些方法在使用的时候要注明所属的锁,而锁又是任意对象,所以这些方法是定义在 Object 类中的