二、多线程-基础2-几个关键字

  • start()run() 方法 (start会新启一个线程,run不会)
  • run()方法就是普通对象的普通方法
  • start()方法 java才会将线程对象和操作系统中的实际线程进行映射,再来执行run()方法
  • yield() 让出cpu的执行权,将线程从运行状态转到可运行状态,但是下个时间片,该线程依然有可能被再次选中运行

  • 守护线程和主线程共死,finally不能保证一定执行

  • synchronized内置锁

  • 对象锁,锁的是类的对象实例
  • 类锁,锁的是每个类的Class对象,每个类的Class对象在一个虚拟机中只有一个,所以类锁也只有一个。
  • private static synchronized void synClass(){ }
  • volatile 适用于只有一个线程写,多个线程读的场景,因为它只能确保可见性。

  • ThreadLocal 线程变量。可以理解为是个map。类型Map

  • 线程间协作。轮训:难以保证及时性,资源开销很大

  • 等待通知

  • wait() 对象上的方法
  • notify() / notifyAll() 对象上的方法。注意 应该尽量使用notifyAll,使用notify因为有可能发生信号丢失的情况。
  • join() 线程A,执行了线程B的join方法,线程A必须要等待B完成了以后,线程A才能继续自己的工作。

  • yield() sleep() wait() nodify() 对锁影响

  • yield():线程在执行yield()以后,持有的锁是不会释放的
  • sleep(): sleep() 方法被调用以后,持有的锁是不释放的
  • wait(): 调动方法之前,必须要持有锁。调用了wait()方法以后,锁就会被释放,当wait()方法返回的时候,线程会重新持有锁
  • notify(): 调动方法之前,必须要持有锁,调用notify()方法本身不会释放锁

你可能感兴趣的:(二、多线程-基础2-几个关键字)