一、同步代码块
1、概述
synchronized() {
需要同步的代码
}
1)对象是什么?
创建共享的锁对象
2)需要同步的代码是哪些?
把多条语句操作共享数据的代码的部分包起来
2、特点
同步的前提:1、多个线程 2、多个线程使用的是同一个对象
同步的好处:同步的出现解决了多线程的安全问题
同步的弊端:当线程相当多的时候,因为每个线程都会区判断同步上的锁,这样子很耗费资源,无形中降低了程序运行的效率
3、关于同步代码块的问题
1)同步代码块的锁对象是?
任意对象
2)同步方法的格式以及锁对象问题?
把同步关键字放在方法上
3)同步的方法是?
this.
4)静态方法以及锁对象问题?
静态方法的锁对象是类的字节码文件对象
4、Lock(锁)
1)作用
更清晰的表达如何加锁和释放锁
2)方法:
void lock();//获取锁
void unlock();//释放锁
5、同步的弊端
1)效率低
2)容易产生死锁
死锁:两个或两个以上的线程在争太资源的过程中,发生的一种相互等待的现象
6、线程间的通讯问题
不同种类的线程间针对一个资源的操作
注意:
1)不同种类的线程都要加锁
2)不同种类的线程加的锁必须是同一把
7、等待唤醒机制
Object类中提供了三个方法:
wait();//等待
notify();//唤醒单个线程
notifyAll();//唤醒多个线程
8、定时器
1)概念
可以在指定的时间做某一件事情,还可以重复的做某一件事情,以来的时Timer和TimerTask两个类
2)Timer(定时)和TimerTask(任务)
public Timer();
public void schedule(TimerTask task, long delay);
public void schedule(TimerTask task, long delay, long period);
public void cancel();
9、sleep和wait区别
sleep()必须指时间,且不释放锁
wait()可以不指定时间,也可以指定时间,释放锁