JAVA多线程总结(子线程、同步、互斥锁)

子线程实现方式:

  1. 继承Thread类;
  2. 实现Runnable接口。

什么情况下需要同步?

  • 当多线程并发,有多段代码同时执行时,我们希望某一段代码在执行的过程中,不要切换到其他线程工作,这时就需要同步。
  • 如果两段代码是同步的,那么同一时间只能执行一段,在一段代码执行结束之前,不会执行另外一段代码。

同步代码块:

  • synchronized加上一个锁对象来定义一段代码,这就叫同步代码块。
    多个同步代码块如果使用相同的锁对象,那么他们就是同步的。

同步方法:

  • 只需要在方法上加synchronized关键字即可。
    非静态方法的锁对象是this;
    静态方法的锁对象是当前类的字节码文件。

注意:

  • 被多个线程共享的成员变量需要加static修饰。
  • 多次开启一个线程是非法的。

JDK1.5新特性:互斥锁

  1. 同步
    使用ReentrantLock类的lock()和unlock()方法进行同步。
  2. 通信
    使用ReentrantLock类的newCondition()方法可以获取Condition对象。
    需要等待的时候使用Condition的await()方法,唤醒的时候用signal()方法。
    不同的线程使用不同的Condition,这样就能区分唤醒的时候找哪个线程了。

你可能感兴趣的:(JAVA多线程总结(子线程、同步、互斥锁))