1. 画图说明线程的生命周期;以及各状态切换使用到的方法
2. 同步代码块中设计到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。
同步监视器是一个对象,相当于锁,哪个线程获得同步监视器就相当于拿到了锁,他就进入了代码块中去执行,没有锁的线程只能等待,获得锁的执行完再进行被分配锁,对于多个线程,他在同步代码块中锁必须保证是唯一的,且要避免死锁的情况发生;
共享数据就是被多个线程共享操作的数据,他会因为同步问题出现线程安全问题。需要用到同步方法来进行同步。防止出现线程安全问题。
synchronized(同步监视器){
//操作共享数据的代码
}
3. sleep()和wait()区别
相同点: 都可以使一个线程进入阻塞状态
不同点: sleep(): 会自动释放同步监视器;sleep()只能使用与接口Thread类下。
wait(): 不能自动释放同步监视器,需要调用notify()来释放同步监视器;wait()则是实现java.lang.Object下,可在任何情况下使用。
4. 写一个线程安全的懒汉式
public class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
Singleton instance = new Singleton();
}
return instance;
}
}
5. 创建多线程的方式有几种?
4种;
Thread类继承;
Runnable接口实现;
Callable接口实现;
线程池(响应速度提高,提高了资源的重复率,便于管理)