Javase第12~13章知识点整理

本文介绍了Java中的IO流概念,包括File类、输入输出流、字节流与字符流的使用,以及编码解码的过程。此外,还讲解了多线程的基本知识,如进程与线程的区别,线程的创建方式(继承Thread或实现Runnable接口),以及线程安全问题和同步机制。
摘要由CSDN通过智能技术生成
第12章 文件与IO
java.io
在Java当中 万事万物皆对象 也可以把计算机系统当中 文件用类表示
File类 即表示一个文件对象,也表示一个目录对象

IO:Input Output 输入与输出流
输入:从硬盘读取数据 输入到内存
输出:从内存读取数据 输出到硬盘(不一定硬盘 网络设备 键盘...)
学习IO流的目的:就为了能够让程序处理一些持久化的数据
流:就是内存与硬盘之间的桥梁,负责数据的运输,数据的流动是单向的

以字节位单位
字节输入流 InputStream
    FileInputStream     文件字节输入流
    BufferedInputStream 字节缓冲输入流
字节输出流 OutputStream
    FileOutputStream    文件字节输出流
    BufferedOutputStream 字节缓冲输出流

字符流:字节流 + 编码表
目的:就是为了更方便操作纯文本文件 txt java py cpp
    纯文本文件 有编码之分的 ASCII
    GBK:中文国标码 专门用于处理中文字符的
        1个字节存储基本英文和标点符号
        2个字节存储中文字符
    UTF-8:万国码 大部分语言体系中的常用字符都有 中文字符没有GBK多
        1个字节存储基本英文和标点符号
        2个字节存储其他的语言符号
        2~3个字节存储中文字符
当前的工作环境默认是UTF-8编码
    String.getBytes() 字符串-字节数组 编码
    new String()      字节数组-字符串 解码
    在编码和解码的过程中 指定码表
    String.getBytes("GBK");
    new String(buf, 0, len, "GBK"))

以字符为单位
字符输入流 Reader
    FileReader
    BufferedReader 字符缓冲输入流
字符输出流 Writer
    FileWriter
    BufferedWriter 字符缓冲输出流
第13章 多线程编程
进程:正在运行的程序
确切的来说,当一个程序进入内存运行时,即变成一个进程
进程是处于运行过程中的程序,具有一定独立功能
进程是系统进行资源分配和调度的一个独立的单位

进程是正在运行的程序,进程负责给程序分配内存空间
每一个进程都是有程序代码组成的,这些代码在进程中 有CPU轮流进行执行

线程:是进程中的一个执行单元/执行路径,负责当前进程中程序的执行
一个进程中至少要有线程,也可存在多个线程的,这种程序我们称之为多线程程序

是否线程越多 执行效率就越高呢?不是
    如果线程越多 每个线程没CPU执行的概率就下降 会明显产生出等待的时间差
    如果真想多开线程 同时还需考虑硬件的要求

【Thread】
实现多线程的方式有两种
1.继承Thread类
    一个类继承了Thread类的话 就具备了可以被多线程执行的功能
    继承Thread 相当于与获得了一个 执行路径
    还差一个 执行任务 重写run函数
    run函数不是由我们调用的 由JVM调用
    start开辟一个执行路径 由虚拟机具体执行 run
    (1)定义一个类继承Thread
    (2)重写run函数
    (3)创建子类对象,就是创建线程对象
    (4)调用start方法,开启线程并让线程执行,同时告诉JVM去调用run方法


2.实现Runnable接口
    如果某一个类已经继承了别的类 则不能在重新继承Thread
    (1)定义类实现Runnable接口 创建一个任务类
    (2)重写run函数 就是任务的具体执行内容
    (3)外面创建Thread对象 创建执行路径
    (4)任务对象与Thread对象进行关联:将Runnable接口的子类对象作为参数传递给Thread的构造函数
    (5)start()

线程安全问题
原因
1.多个线程共同操作同一个数据
2.操作同一个数据的语句有多条

同步代码块:把需要被加锁的代码片段放到synchronized(){}中,并且关联一把锁(任意对象)
            锁对象必须是唯一的
同步好处:解决了线程安全的问题
同步弊端:降低了多线程的效率,多个线程在同步代码块中呈现出的单线程的情况

注意:同步代码块中 禁止再去使用别的同步情况 可能会出现死锁问题

在函数声明上写一个synchronized 说明这个函数是同步函数
同步函数 = 就是意味着该函数内容所有的代码都被同步代码块包含
同步函数的锁是谁呢? this
静态同步函数的锁是谁呢?就是当前类的字节码Class对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗着,享受着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值