day15-多线程2

1、 画图说明线程的生命周期,以及各状态切换使用到的方法等

image-20230102210727971

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、使用线程池进行创建

posted @ 2023-01-04 09:28  huxingxin  阅读(17)  评论(0编辑  收藏  举报