(尚硅谷java零基础教程)学习笔记day18-每日一考

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

状态,方法
在这里插入图片描述

2. 同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。

方式一:同步代码块
synchronized(同步监视器){
//操作共享数据的代码 (不能包括多了,也不能包括少了)
}

说明:

  1. 操作共享数据的代码,即为需要被同步的代码
  2. 共享数据:多个线程共同操作的变量。比如:ticket就是共享数据。
  3. 同步监视器,俗称:锁。
    任何类的对象都可以充当锁。要求:多个线程必须共用同一把锁。

方式二:同步方法

  1. 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。
  2. 非静态的同步方法,同步监视器是:this
    静态的同步方法:同步监视器是:当前类本身(因为静态方法随着类的加载而加载,先于对象的产生)

3. sleep()和wait()的区别

相同点:都可以让线程进入阻塞状态。
不同点:

  1. 两个方法声明位置不同:Thread类中声明sleep(),Object类中声明wait()方法
  2. 调用要求不同:sleep()方法可以任意调用,wait()必须在同步方法或同步代码块中。
  3. 释放同步监视器:如果两个方法都声明在同步方法或同步代码块中,sleep()不会释放锁,wait()会释放锁。

注: wait()、 notify()和 notifyAll() 这三个方法必须有锁对象调用,而任意对象都可以作为synchronized的同步锁,因此这三个方法只能在Object类中声明。

4. 写一个线程安全的懒汉式

class Bank {
    private Bank() {}
    private static Bank bank = null;
    public static Bank getInstance() {//同步监视器:Bank.class
        //方式二:效率更高
        if (bank == null) {
            synchronized (Bank.class) {
                if (bank == null) {
                    bank = new Bank();
                }
            }
        }
        return bank;
    }
}

5. 创建多线程有哪几种方式:4种

继承 Thread 类
实现 Runnable 接口
实现 Callable 接口
线程池(响应速度提高了,提高了资源的重用率,便于线程管理)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值