day17每日一考

这篇博客详细探讨了线程的生命周期及其状态转换,包括新建、就绪、运行、阻塞和死亡等状态,并介绍了同步代码块中的同步监视器和共享数据的概念,强调了正确使用的重要性。同时,对比了sleep()和wait()的区别,前者不释放锁,后者则会。此外,给出了一个线程安全的单例模式实现,并列举了创建多线程的四种方式:继承Thread类、实现Runnable接口、使用线程池和实现Callable接口。
摘要由CSDN通过智能技术生成

day17每日一考

题目

1.画图说明线程的生命周期,以及各状态切换使用到的方法等
2.同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。
3.sleep()和wait()的区别
4.写一个线程安全的濑汉式
5.创建多线程有哪几种方式

答案

第一题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYaUwIbW-1658650981585)(https://cdn.jsdelivr.net/gh/gaoyoudao/Picture/img/image-20220724152227550.png)]

第二题

同步监视器只能为单一对象,使用同一个同步监视器

同步监视器可以为任意类,俗称锁

在实现方法中可以直接使用this来充当同步监视器

在继承类中则需要类名.class来充当同步监视器

同步监视器不可以包含过多或过少

共享数据代码用synchronized()方法包含。

共享数据在实现方法中可以直接使用非静态属性来充当同步监视器

共享数据在继承类中可以必须使用静态属性来充当同步监视器

第三题

在执行wait方法的时候会释放同步锁,sleep不会

wait方法可以手动方法释放,sleep不会

sleep可以放在代码任何需要休眠的地方,wait只可以放在同步代码块或同步方法的方法体中

sleep是Thread的静态方法,wait是java.lang.Object类的非静态方法

第四题

public class Bank {
    private Bank() {
    }
    private static Bank bank=null;
    public static Bank getInstance(){

        if (bank!=null) {
            synchronized (Bank.class) {
                if(bank!=null){
                    bank=new Bank();
                    return bank;
                }
                return bank;
            }
        }
        return bank;
    }
}

第五题

创建多线程有四种方式

  • 继承Thread类
  • 实现Runnable接口
  • 线程池
  • 实现Callable接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值