1.线程的生命周期 ,方法
- 新建
- 就绪
- 运行
- 阻塞
- 死亡
new , join , wait , sleep , stop 等
2 .
同步监视器 : 锁的对象
共享数据 ; 多线程下要共享的数据
使用关键字
synchronized(“这里是同步监视器”){
这里是对共享数据的操作
}
3.sleep 和 wait 的区别
-
- 定义的类的位置不同 : Thread 中 的sleep Object 中的wait
-
- 程序中的位置不同 :sleep 在任何位置 wait必须在同步代码块或者同步方法中。
-
- 是否释放锁资源不同 : sleep 不释放锁资源 ,wait释放锁资源
4.写一个线程安全的懒汉式单例模式
public class HomeWoek {
}
class A003{
HomeWoek homeWoek = null;
private A003() {
}
public HomeWoek getInstance(){
if (homeWoek == null){
synchronized (this){
if(homeWoek == null){
homeWoek = new HomeWoek ();
}
}
}
return homeWoek;
}
}
5.创建多线程的方法有几种呀
有4种 !! 我拍案而起
- 1.继承Thread
- 2.实现Runnable
- 3.实现Callable
- 4.使用线程池(Executors)(响应速度变快 , 重复使用率变高 , 方便管理)
解决线程安全的方法
同步方法
同步代码块
lock (Reentrantlock lock = new ReentrantLock())
使用优先顺序:
lock > 同步代码块 > 同步方法
好处:线程安全
坏处:效率变低
synchronized 和 lock对比
synchronized 在结束时自动提交
lock比较灵活,需要手动lock 和 unlock
注意2.2 要注意同步监视器是谁,要使用同步监视器来调用这些方法不然会出现报错问题