day15-多线程2
1、 画图说明线程的生命周期,以及各状态切换使用到的方法等
2、 同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。
理解:
同步监视器就是一把锁,当一个线程进入同步代码块并且拿到这个锁,外面的线程就进不来,只能等待当前线程运行完同步代码块,释放锁之后才能进入
共享数据就是多个线程都会进行操作的数据,会引发线程安全问题。
注意点:
同步代码块里的同步监视器,多个线程必须共用,且是唯一的。
对于多个线程处理共享数据,需要注意线程安全问题
3、sleep()和wait()的区别
sleep() 让线程睡眠一段时间,wait()让线程进入阻塞状态,直到被唤醒
sleep() 声明在Thread类中,wait()声明在java.lang.Object类中
sleep() 可以使用在任何需要使用的地方,wait()只能使用在同步代码块或同步方法中,且调用者只能是同步监视器
sleep()不会主动释放锁,调用wait() 会zhu'd
4、写一个线程安全的懒汉式
public class People {
private static People people;
private People(){}
public static People getInstance(){
if(people == null){
sysnchronized(People.class){
if(people == null){
people = new People()
}
}
}
return people;
}
}
5、创建多线程有哪几种方式:4种
1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、使用线程池进行创建