第十九天笔记

多线程: 多任务执行,多路径执行
优点:
    提高性能
    提高效率

进程与线程之间的区别:
    进程 : 系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据空间,进程之间的切换开销较大
    线程 : 程序中的顺序流,线程是cpu调度与执行的最小单位,多个线程之间共享进程的代码和数据空间,每一个线程都有自己的程序计数器运行栈,线程之间切换开销较小
    一个cpu同一时刻只能调度一个线程

线程学习内容:
    线程的概念,优缺点
    创建线程的方式  *****
    线程的状态
    线程安全问题    *****
    线程通信

创建线程的方式 :
    继承Thread,重写run方法 + start开启线程
    实现Runnable接口,重写run方法 + start开启线程
    实现Callable接口,重写call方法 + 线程池

继承Thread,重写run方法 + start开启线程

实现Runnable接口,重写run方法+start开启
    优点:
        接口多实现,类的单继承
        实现资源共享

 重写方法对异常抛出的要求:
    重写方法上抛出的异常类型<=被重写方法上异常的抛出类型

线程的状态:
    新生状态 : new
    就绪状态
    运行状态 : cpu调度
    阻塞状态
    终止状态

    一个线程如果一旦进入终止状态,不可恢复
    一个线程如果进入到阻塞状态,阻塞解除之后,不能直接恢复到运行,会直接恢复高就绪状态,等待cpu的调度

    如何让线程进入到就绪状态:
        1.start()
        2.阻塞解除
        3.cpu的调度切换
        4.yield 礼让线程:当线程执行到yield方法,会让出cpu的资源,同时线程会恢复就绪状态
    如何让线程进入阻塞状态:
        1.sleep()
        2.join() 插队线程:A线程执行过程中,如果B线程插队了,A线程就会进入到阻塞状态,等待插队线程执行完毕|等待执行的时间,A线程会恢复到就绪状态
    void join() 等待这个线程死亡。
    void join(long millis) 此线程最多等待 millis毫秒。
    void join(long millis, int nanos) 此线程最多等待 millis毫秒加上 nanos纳秒。
        3.wait() 等待
        4.IO

    如何让线程进入终止状态:
        1.正常执行完毕
        2.stop() 过时--> 不推荐使用
        3.通过标识判断

sleep 线程休眠
    static void sleep(long millis) 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。
    static void sleep(long millis, int nanos) 执行ms+ns

    当一个线程调度sleep进入睡眠状态,让出cpu的资源
    抱着资源睡觉: 这个资源不是cpu的资源, 值的是对象的锁资源

    作用:
        放大问题出现的可能性
        模拟网络延迟
void interrupt()  为线程添加一个中断标识
boolean isInterrupted() 测试此线程是否已被中断,是否曾经调用过interrupt方法添加了中断标识
static boolean interrupted() 测试当前线程是否已被中断,是否曾经调用过interrupt方法添加了中断标识,同时复位标识

注意: 当调用sleep方法线程睡眠时 : InterruptedException - 如果有任何线程中断了当前线程。 抛出此异常时,将清除当前线程的中断状态


Thread.State 线程状态。 线程可以处于以下状态之一:
    NEW : new Thread()
    尚未启动的线程处于此状态。
    RUNNABLE : 就绪|运行
    在Java虚拟机中执行的线程处于此状态。
    BLOCKED : 等待对象锁的阻塞状态
    被阻塞等待监视器锁定的线程处于此状态。
    WAITING : wait(),join()等
    无限期等待另一个线程执行特定操作的线程处于此状态。
    TIMED_WAITING : 与时间相关的等待,sleep(ms),join(ms),wait(ms)...
    正在等待另一个线程执行最多指定等待时间的操作的线程处于此状态。
    TERMINATED : 终止
    已退出的线程处于此状态。

线程的优先级 :
    方法线程优先执行的可能性
    1~10 设置值
        1最小 ->static int MIN_PRIORITY 线程可以拥有的最低优先级。
        10最大->static int MAX_PRIORITY 线程可以拥有的最大优先级。
        5默认值 ->static int NORM_PRIORITY 分配给线程的默认优先级。

    int getPriority() 返回此线程的优先级。
    void setPriority(int newPriority) 更改此线程的优先级。

线程的分类:
   用户线程 : 默认线程为用户线程
   守护线程

守护线程 : 守护用户线程的
    当所有的用户线程全都执行完毕,守护线程直接结束
    垃圾回收机制典型守护线程
    void setDaemon(boolean on) 将此线程标记为 daemon线程或用户线程。

线程安全 :
    当多个线程同时操作同一份资源,才有可能出现线程不安全问题

 同步锁 synchronized : 有可能出现数据不安全的代码段,让多个线程排队执行
 同步的使用:
    同步条件 :  协调多个线程排队执行的条件  -->对象的锁
    同步的代码 :  需要多个线程排队执行的代码
 synchronized用法:
    修饰方法 : 同步方法
        同步实例方法
            条件 : 调用成员方法的对象
            代码范围 : 整个方法体
        同步静态方法
            条件 : 锁类->锁的类的Class对象->一个类只有一个,加载到内存中究存在Class对象,不变,唯一
            代码范围 : 整个方法体

    修饰块 : 同步块
       synchronized(条件){
            排队执行的代码;
       }

    注意:
        同步的代码范围太大,效率太低
        同步的代码范围太小,锁不住,不安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 19c OCP全程课堂笔记是一份详细记录Oracle数据库19c版本OCP培训课程内容的笔记。这个课程旨在为数据库管理员和开发人员提供深入的Oracle数据库知识,并帮助他们准备并通过Oracle Certified Professional (OCP)认证考试。 课程的第一部分主要介绍了Oracle数据库的概述,包括数据库的基本概念、架构和体系结构。学员学习了如何安装和配置Oracle数据库19c,并了解了数据库实例、表空间、数据文件等关键组件。 在第二部分中,学员学习了如何管理数据库对象,包括表、索引、视图和存储过程。他们还学习了如何使用Oracle数据字典来查询和管理数据库元数据。 第三部分重点讲解了Oracle数据库的性能优化和故障排除。学员学习了如何监视和调整数据库性能,并学习了使用工具和技术来解决常见的数据库问题。 在第四部分中,学员学习了如何备份和恢复Oracle数据库。他们了解了不同类型的备份和恢复策略,并学习了如何使用RMAN工具执行备份和恢复操作。 第五部分介绍了Oracle高可用性和数据保护解决方案。学员学习了如何配置和管理数据保护功能,如数据镜像、数据卷和故障转移。 最后,课程结束前,学员进行了一系列实践实验和案例研究,以加深对所学知识的理解和应用。 通过参加Oracle 19c OCP全程课堂,学员可以全面了解Oracle数据库的各个方面,并为OCP认证考试做好充分准备。这些课堂笔记提供了课程内容的详细记录,学员们可以通过复习这些笔记来巩固所学知识并进行复习,以便在考试中取得成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值