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.线程间通信
不同种类的线程针对同一个资源的操作.(生产者, 消费者)
生产者, 消费者, 等待唤醒机制: