java多线程(四)之同步机制

时间:2021-09-21 15:58:11

1.同步的前提

  多个线程

  多个线程使用的是同一个锁

2.同步的好处

  同步的出现解决了多线程的安全问题

3.同步的弊端

  当线程较多时, 因为每个线程都会去判断同步上的锁, 这样是很耗费资源的, 会降低程序的运行效率.

4.同步方法:

  1.就是将同步关键字, synchronized加到方法上, 此时的锁对象是this

  2.静态方法的锁对象是类的字节码文件对象, Xxx.class

5.jdk5之后的Lock锁

  Lock接口的两个方法

    lock(): 获取锁

    unlock(): 释放锁

  子类:ReentrantLock()

    通过调用子类的这两个方法, 获取锁, 释放锁, 将需要同步的代码块包进来, 同样可以解决线程安全问题.如下伪代码:

    ReentrantLock lock= new ReentrantLock();

    try{

      lock.lock();

      同步代码;

    }finally{

      lock.unlock();

    }

6.同步弊端

  a.效率低

  b.如果出现同步嵌套, 容易产生死锁

    死锁: 两个或两个以上线程, 在争夺资源的过程中, 出现相互等待的现象.

7.线程间通信

  不同种类的线程针对同一个资源的操作.(生产者, 消费者)

  生产者, 消费者, 等待唤醒机制:

  java多线程(四)之同步机制