




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
克隆机制克隆机制 克隆就是在内存中复制对象 Java 克隆 Clone 是 Java 语言的特性之一 但在实际中应用 比较少见 但有时候用克隆会更方便更有效率 缺点应该是多分配了一块空间 占内存 吧 如果数据量大 内存占用的就大 对于克隆对于克隆 Clone Clone JavaJava 有一些限制 有一些限制 1 1 被克隆的类必须自己实现 被克隆的类必须自己实现 CloneableCloneable 接口 以指示接口 以指示 Object clone Object clone 方法可以合法地方法可以合法地 对该类实例进行按字段复制 对该类实例进行按字段复制 CloneableCloneable 接口实际上是个标识接口 没有任何接口方法 接口实际上是个标识接口 没有任何接口方法 2 2 实现 实现 CloneableCloneable 接口的类应该使用公共方法重写接口的类应该使用公共方法重写 Object cloneObject clone 它是受保护的 某 它是受保护的 某 个对象实现了此接口就克隆它是不可能的 即使个对象实现了此接口就克隆它是不可能的 即使 cloneclone 方法是反射性调用的 也无法保证方法是反射性调用的 也无法保证 它将获得成功 它将获得成功 3 3 在 在 Java lang ObjectJava lang Object 类中克隆方法是这么定义的 类中克隆方法是这么定义的 protectedprotected ObjectObject clone throwsclone throws CloneNotSupportedException CloneNotSupportedException 创建并返回此对象的一个副本 表明是一个受保护的方法 同一个包中可见 创建并返回此对象的一个副本 表明是一个受保护的方法 同一个包中可见 按照惯例 返回的对象应该通过调用按照惯例 返回的对象应该通过调用 super clonesuper clone 获得 获得 克隆分为深克隆和浅克隆 浅度克隆 浅度克隆对于要克隆的对象 对于其基本数据类型的属性 复制一份给新产生 的对象 对于非基本数据类型的属性 仅仅复制一份引用给新产生的对象 即新产生的对 象和原始对象中的非基本数据类型的属性都指向的是同一个对象 深度克隆 在浅度克隆的基础上 对于要克隆的对象非基本数据类型的属性对应的类 也 实现克隆 这样对于非基本数据类型的属性 复制的不是同一份引用 即新产生的对象和 原始对象中的非基本数据类型的属性指向的不是同一个对象 序列化机制序列化机制 序列化也叫串行化 试讲对象转换成紧凑的二进制域的形式 使该对象具备可以被持久化 即永久保存的特性 序列化的必要性序列化的必要性 Java 中 一切都是对象 在分布式环境中经常需要将 Object 从这一端网络或设 备传递到另一端 这就需要有一种可以在两端传输数据的协议 Java 序列化机制就是为了解决这 个问题而产生 如何序列化一个对象如何序列化一个对象 一个对象能够序列化的前提是实现 Serializable 接口 Serializable 接口没有方法 更像是个标记 有了这个标记的 Class 就能被序列化机制处理 import java io Serializable class TestSerial implements Serializable public byte version 100 public byte count 0 然后我们写个程序将对象序列化并输出 ObjectOutputStream 能把 Object 输出 成 Byte 流 我们将 Byte 流暂时存储到 temp out 文件里 public static void main String args throws IOException FileOutputStream fos new FileOutputStream temp out ObjectOutputStream oos new ObjectOutputStream fos TestSerial ts new TestSerial oos writeObject ts oos flush oos close 如果要从持久的文件中读取 Bytes 重建对象 我们可以使用 ObjectInputStream public static void main String args throws IOException FileInputStream fis new FileInputStream temp out ObjectInputStream oin new ObjectInputStream fis TestSerial ts TestSerial oin readObject System out println version ts version 多线程机制 反射机制反射机制 反射是 Class 类具备了解析其他类的对象的内部结构的功能或者说是本领 Java 中至简的说只有两个类 Object 和 Class 类 有了 Class 类 就可以由 Class 类解析生成了你想要的实体类 Class 以类的形式存在 Object 以对象的形式存在 所以说 Class 类是描述 Object 的 反射机制也叫做自省机制 自己了解自己 Class 类中有一系列的属性及方法 这些东西 就可以实现反射 应用反射 就可以知道这个类中哪些方法和属性可以调用和使用 CLass 类中的方法有很多 知晓类的内部结构 就可以调用相应的方法来获取类中相应的 属性或方法数组并生成方法或者属性类的集合 这些可以自行学习 API 来理解 由 Class 类获取到了一个类中的属性和方法等结构内容 就可以知晓一个类的内部结构是 什么样的 Class 类不仅可以描述对象 还可以生成对象 生成的对象经过下塑造性就可以得到我们 想要的类 对反射进行封装的类为 java lang Class 类 多线程机制多线程机制 简介 多线程的目的是为了最大限度的利用 CPU 资源 Java 编写程序都运行在在 Java 虚拟机 JVM 中 在 JVM 的内部 程序的多任务是通过 线程来实现的 每用 java 命令启动一个 java 应用程序 就会启动一个 JVM 进程 在同一 个 JVM 进程中 有且只有一个进程 就是它自己 在这个 JVM 环境中 所有程序代码的 运行都是以线程来运行 对于一个进程中的多个线程来说 多个线程共享进程的内存块 当有新的线程产生的时候 操作系统不分配新的内存 而是让新线程共享原有的进程块的内存 因此 线程间的通信 很容易 速度也很快 不同的进程因为处于不同的内存块 因此进程之间的通信相对困难 实际上 操作的系统的多进程实现了多任务并发执行 程序的多线程实现了进程的并发执 行 多任务 多进程 多线程的前提都是要求操作系统提供多任务 多进程 多线程的支 持 内容复习 内容复习 程序运行的本身是以 进程 为单位的 程序中的细小的分支即线程 线程离开进程遍无意 义 进程 是程序的一次动态执行过程 运行在操作系统平台 它对应了从代码加载 执行 至执行完毕的一个完整过程 main 方法中执行 main 方法本身就是一个进程 线程 是比进程更小的执行单位 一个进程在其执行的过程中 可以产生多个线程 他们 分别可以执行不同的任务 进程与进程来讲 是彼此独立的 不共享空间 而线程之间需要互相联系 所以空间是可 以相互共享的 进程和线程的关系和区别 进程和线程的关系和区别 进程需要操作系统为其分配独立的内存地址空间 而同一个进程中的线程在同一块地址空 间中工作这些线程可以共享一块内存和系统资源 比如共享一个对象或者打开的一个文件 操作系统是以进程为单位的 程序是以线程为单位的 多线程程序的用途 多线程程序的用途 1 充分利用 CPU 资源 避免资源的浪费 提高处理数据的效率 2 与用户的更往交互 如复制 ofice 简化开发模型 每个线程就是指一个单独的任务 这样有助于开发人员对程序的理解和 维护 3 模拟同步动作 动画的效果 交替的执行 几个线程同步执行 将任务分化成更细粒度的线程 交替执行 模拟同步操作每个线程都会得到一小段程序 执行的时间片 4 节约成本 提高速率的 3 中方法 a 增加处理器个数 b 启动多个进程 相互独立 影响通信 c 多线程 多线程的声明周期多线程的声明周期 阶段阶段 1 1 创建阶段 实例化线程创建阶段 实例化线程 java lang Thread java lang Runnable 接口 线程的封装类 Thread 1 设计线程类 class A extends Thread public void run 被重构的 Run 方法 写要执行的业务逻辑代码 代码为 当前线程抢占到资源之后所做的事情 2 设计 Runnable 接口类 实现该接口 创建线程 class A implements Runnable public void run 被重构的 Run 方法 写要执行的业务逻辑代码 代码为 当前线程抢占到资源之后所做的事情 两种方法的区别 单继承就是用 thread 即可 实现多个父类时 用 Runnable 接口 线程对象实例化方法 实现 Runnable 接口时的线程对象实例化方法 Thread t new Thread new A 继承 Thread 类时的线程对象实例化方法 A a1 new A 2 可运行状态 1 就绪状态 当前创建的线程对象一定要放在队列当中 这个队列叫 CPU 线程队列 只 有放在该对列里 才有去抢占 CPU 资源的权利 放在该队列里了 就表明该队列处于就绪 状态 CPU 看见谁 就会给谁分配时间片 让其运行 然后在交替的去分配给别的线程时间片 就绪状态调用的方法为 start 方法 2 运行 运行状态回调的方法为 run 方法 3 阻塞状态 主动让其休眠 被动的让其休眠 调用的方法 1 为 sleep int 时间 ms 休眠期 哪个线程调用该方法 哪个线程休息 休息时间有参数决定 休眠时并没有退出队列 休息之后 不需要要通知 CPU 可直接调 用 调用的方法 2 wait 等待 在线程队列之外进行等待 来解决阻塞的问题 详解为 在阻塞时 会主动退出队列 而再次需要他时 程序要主动召唤它才能再次使用 而唤醒处于等待的对象调用的方法有两种 1void notify 如果当前的程序可以解决阻塞状态 则需要主动的去唤醒处于队列之 外的其他线程对象 唤醒一个线程的方法为 notify 2 唤醒所有线程的方法为 notifyAll 封装这三种方法的类为 Object 类 wait notify notifyAll 系统直接支持线程阻塞机制 多线程同步机制 多线程带来的问题 处理数据的方法有可能存在数据处理不安全 数据处理不同步的安全 隐患 那么处理该问题的方法为线程同步的处理方法 阻塞的第三种方法 在线程要处理的方 法前面加上修饰词 synchronizedsynchronized 降低了执行速率 同步之后是排队进行处理的 但是 降低了执行速率 同步之后是排队进行处理的 但是 是随机的排队 一个一个的处理 避免了其他的线程抢占资源后出现错误安全隐患 是随机的排队 一个一个的处理 避免了其他的线程抢占资源后出现错误安全隐患 线程同步的优缺点 线程同步的优缺点 线程同步 线程同步 即在线程要处理的方法前面加上修饰词 synchronizedsynchronized 可以确保数据在多线 可以确保数据在多线 程的环境下时 处理是准确和安全的 程的环境下时 处理是准确和安全的 线程同步的方法处理数据的速度慢 线程同步的方法处理数据的速度慢 线程同步总结 线程同步总结 程序处理数据时程序处理数据时 尤其是写数据 我们首先应该注意的是 数据处理的准确性 一致性和安尤其是写数据 我们首先应该注意的是 数据处理的准确性 一致性和安 全性 所以 为了确保以上三点 全性 所以 为了确保以上三点 javajava 当中是通过同步来解决上述问题的 而同步的方法 当中是通过同步来解决上述问题的 而同步的方法 就意味着当前线程在处理数据时 其他的线程对象要处于阻塞状态 所以线程同步会导致就意味着当前线程在处理数据时 其他的线程对象要处于阻塞状态 所以线程同步会导致 数据的处理速度慢 可是线程同步却能保证数据处理的安全性 数据的处理速度慢 可是线程同步却能保证数据处理的安全性 使用同步的情况 使用同步的情况 多线程程序同时访问一个方法时 该方法如果是更新 增删改 数据的方法 就一定要加多线程程序同时访问一个方法时 该方法如果是更新 增删改 数据的方法 就一定要加 上同步的修饰词上同步的修饰词 synchronized synchronized 查询数据的时候要考虑数据的速度 不需要考虑安全性 查询数据的时候要考虑数据的速度 不需要考虑安全性 所以不需要同步 所以不需要同步 4 销毁状态 Yeild 官方解释终止线程 但实际应用时不是 Alived 企鹅 U 定线程是否被销毁 不能使线程终止 是线程死亡的方法是 在 run 方法中加条件 要销毁的时候 return 来结束 run 方法 线程是分级别的 0 1 2 高中低 高级别的线程 CPU 看到他的几率越高 线程习题 线程习题 进程与线程的定义与区别 进程 是程序的一次动态执行过程 他对应了从代码加载 执行至执行完毕的一个整个过 程 一般在控制类中住方法里执行的 main 本身就是一个进程 线程 是比进程更小的执行单位 一个进程在其执行过程中 可以产生多个线程 他们分 别可以执行不同的任务 区别 进程需要操作为其分配独立的内存地址空间 而同一个进程中的线程在同一块地址空间 中工作 这些线程可共享同一块内存和系统资源 比如共享一个对象或者共享打开的一个文件 6 多线程的用途 a 充分利用 CPU 的资源避免资源浪费 什么时候使用多线程 即提高系统效率时使用 b 与用户的更加交互 复制 Office 简化开发模型 每一个线程就是指一个单独的任务 这样有助于开发人员对程序的理 解和维护 c 模拟同步动作 模拟同步动作 d 节约成本 提高效率的三种办法 1 增加处理器的个数 多核 成本高 2 启动多个进程 3 多线程 提高处理速度 没有在硬件上增加成本 7 线程的生命周期 分别由程序实现 例如 1 创建状态 实例化线程对象 java lang Thread java long Runnable 接口 如何设计线程类 方法一 先继承 Thread 之后重构 run 例 class A extends Thread Thread 中有一个 无返回值的 run public void run 重构 run 方法二 实现 Runnable 之后重构 run 例 class A implements Runnable Runnable 中有一个 无返回值的 run public void run 重构 run 如何创建线程 方法一 Thread Thread t new Thread new A 方法二 Runnable A a1 new A 2 可运行状态 包括两种状态 即 就绪状态和运行状态 就绪状态调用的方法是 线程对象 start 运行状态执行的是 重构 run 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政审考试题库及答案解析
- 矿山电子高级考试题库及答案
- 征信考试题库及答案
- 商业合作市场调研分析报告合同
- 企业合同管理模板及风险提示
- 2025年新疆农作物制种质量保障合同
- 2025年贵州公需科目之乡村振兴试题(含答案)
- 祁阳历史中考试卷及答案
- 技校政治考试题目及答案
- 唐山单招十类考试题及答案
- FZ/T 64087-2022木棉纤维絮片
- GB/T 19812.6-2022塑料节水灌溉器材第6部分:输水用聚乙烯(PE)管材
- CSCCP宫颈细胞病理学理论考试题
- 设计说明书玉米秸秆粉碎还田机
- 仪表专业现场仪表知识
- 【课件】1.1精微广大-绘画的功能与分类课件-2021-2022学年高中美术人美版(2019)选修绘画
- 自然辩证法 精品课课件 (全套讲义)
- 《小班幼儿生活自理能力存在的问题与对策(论文)11000字》
- 课题的选题及研究方案的设计课件
- 当代西方翻译理论(一)
- 第八章现代生物技术在环境保护中的应用课件
评论
0/150
提交评论