本帖最后由 鹏鹏鹏鹏 于 2018-11-26 16:06 编辑
day07 线程间通信 线程池 Lambda表达式 多个线程在处理同一个资源, 但是多个线程的处理动作却不相同(线程的任务不同, 需要协调合作) wait/notify, 就是"线程间的一种协作机制", 用于实现线程间通信 void notify(): 随机唤醒在同一个锁对象上的某一个处于等待状态的线程 void notifyAll(): 唤醒所有在同一个锁对象上处于等待状态的线程 void wait(): 让当前线程处于无限等待状态, 同时释放锁 Executors类: 线程池工厂类, 用于创建和管理线程池 static ExecutorService newFixedThreadPool(int nThreads): 创建固定数量线程的线程池(常用) ExecutorService接口:真正执行任务的线程池服务 Future submit(Runnable task): 提交一个Runnable任务 void shutdown(): 通知线程执行完任务后关闭. 如不调此方法, 则线程执行完任务后仍在运行以便重复使用 1. 使用Executors的静态方法 newFixedThreadPool(int nThreads) 创建线程池ExecutorService 2. 创建一个任务类, 实现Runnable接口, 重写run()方法 3. 调用ExecutorService对象的 submit(Runnable task) 方法, 传递任务给线程池, 执行任务 4. 调用ExecutorService对象的 shutdown() 方法, 销毁线程池 (不建议执行) (1) 特点:简化代码编写 (使用 λ Lambda表达式, 简化匿名内部类的代码), 函数式: 注重输入什么(参数), 得到什么结果(运行代码) 接口中抽象方法的参数列表. 没参数就空着; 有参数就写, 多个参数 用逗号分隔 1. (参数列表): 参数"类型"可以省略 (a, b) -> {} 2. (参数列表): 如果参数只有1个, 则"类型"和"小括号"都可以省略 a -> sout(a) 3. {一些代码}: 如果只有一条代码, 则"大括号", "return", "分号"都可以"一起省略" (5) 1. Lambda只能用于接口, 且"接口中有且仅有一个抽象方法"(也称为"函数式接口") 接口中只能有一个抽象方法, 才能推断出来重写的是这个抽象方法 (1)注解;"文件"和"目录"的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作 不以盘符开始的简化路径. IDEA项目, 相对于项目的根目录 File File(String pathname): 根据 路径字符串 封装一个File对象 File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象 File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File 对象 String getAbsolutePath(): 返回此File的绝对路径名字符串 String getPath(): 获取File对象的封装路径 (创建对象时传入的路径) String getName(): 获取File对象的文件名或目录名 d:\a\b\c\aaa.txt long length(): 获取File表示的"文件"大小的字节byte数 (不能获取目录的大小) boolean createNewFile(): 当文件不存在时, 创建一个新的空文件 boolean delete(): 删除由此File表示的文件或目录. boolean mkdir(): 创建File表示的目录 boolean mkdirs(): 创建File表示的多级目录 String[] list(): 获取当前File目录下的所有子文件或目录的名字数组 File[] listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组 boolean exists(): 判断File对象代表的文件或目录是否实际存在 boolean isDirectory(): 判断File表示的是否为目录 boolean isFile(): 判断File表示的是否为文件 遇到一个问题时, 将该问题拆解成可以解决的小问题, 如果解决不了, 继续拆解为更小的问题. 如果小问题解决了, 大问题也就能够解决 简介递归:A方法调用B方法,B方法调用方法,C方法调用A方法 1. 递归要有限定条件(出口), 保证递归能够停止(就是在某种情况下方法不再调用自己), 否则会栈内存溢出
调用方法时, 方法的主体不变, 但每次传递的参数值不同, 可以使用递归 boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入 java.io.FilenameFilter接口: boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
概念:
file:///G:/CloudNotes/627285191@qq.com/a21685c70e444347aaece374710dd028/%25E5%25B1%258F%25E5%25B9%2595%25E6%2588%25AA%25E5%259B%25BE.jpg
IO流: 输入(Input)输出(Output)流 二 字节输出流 OutputStream和FileOutputStream OutputStream抽象类:字节输出流(字节输出流父类) abstract void write(int b): 一次写一个字节 void write(byte[] b): 一次写一个字节数组 void write(byte[] b, int offset, int len): 一次写一个字节数组的一部分 FileOutputStream类: 文件字节输出流 构造方法: FileOutputStream(String name): 通过文件路径创建文件字节输出流 FileOutputStream(File file): 通过File对象创建文件字节输出流 FileOutputStream(String name, boolean append): 通过文件路径创建流, true可以续写 FileOutputStream(File file, boolean append): 通过File对象创建流, true可以续写 四,字节输入流 InputStream和FileInputStream InputStream抽象类: 字节输入流 (顶层类) 成员方法 : void close(): 释放资源 int read(byte[] b): 一次读一个字节数组 FileInputStream类: 文件字节输入流 构造方法: FileInputStream(String name): 使用文件路径创建文件字节输入流 FileInputStream(File file): 使用File对象创建文件字节输入流
file:///G:/CloudNotes/627285191@qq.com/d0d7f8da8114434f8db09ab890e2bfff/%25E5%25B1%258F%25E5%25B9%2595%25E6%2588%25AA%25E5%259B%25BE1.jpg
flush(): 刷新缓冲区 (将数据从内存中写入到磁盘) close(): 刷新缓冲区, 并释放资源. 关闭流后不能再用同一个流对象操作 flush() 可以省略, 只用 close()来 刷新并释放资源 oid write(char[] cbuf): 写一个字符数组 abstract void write(char[] b, int off, int len): 写一个字符数组的一部分 void write(String str): 写一个字符串 void write(String str, int off, int len): 写一个字符串的一部分 FileWriter(File file, boolean append): 通过File对象创建流. 第二个参数为true可以续写 FileWriter(String fileName, boolean append): 通过文件路径创建流. 第二个参数为true可以续写 fw = new FileWriter("d:\\09_IOAndProperties\\g.txt", true); for (int i = 0; i <10 ; i++) { fw.write("HelloWorld"+i+"\r\n"); } catch (IOException e) { } catch (IOException e) { try (创建流对象语句,如果多个,使用';'隔开) { } catch (IOException e) {
FileWriter fw = new FileWriter("fw.txt"); FileReader fr = new FileReader("fr.txt"); } catch (IOException e) { 特性:双列集合 键和值都是String类型 继承Hashtable
造方法: Properties(): 创建一个Properties集合 成员方法: Object setProperty(String key, String value): 保存/替换键值对 String getProperty(String key): 通过键获取值. 键不存在返回null Set<String> stringPropertyNames(): 返回键的集合 void store(OutputStream out, String comments): 将集合用字节流写入文件(不能中文),并写入注释 void store(Writer writer, String comments): 将集合用字符流写入文件(可以中文),并写入注释 void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能中文) void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以中文) |
day10 缓冲流 转换流 序列化流 打印流
file:///G:/CloudNotes/627285191@qq.com/b9743582e5424e36a4e2e78f62b16373/a50ca8ad4c7c4ca7b709bcccdf16881a.jpg 但缓冲流内部定义了一个缓冲数组, 在读的时候类似于我们一次读一个数组的方式, 减少了磁盘操作次数, 提高了程序效率 二 缓冲字节输出流;BufferedOutputStream 构造方法: BufferedOutputStream(OutputStream out): 使用基本流创建一个缓冲字节输出流 BufferedOutputStream(OutputStream out, int size): 使用基本流创建一个缓冲字节输出流, 设置缓冲区大小 三 缓冲字节输入流:BufferedInputStream 构造方法: BufferedInputStream(InputStream in): 使用基本流创建一个缓冲字节输入流 BufferedInputStream(InputStream in, int size): 使用基本流创建一个缓冲字节输入流, 设置缓冲区大小 构造方法: BufferedWriter(Writer out): 使用基本流创建一个缓冲字符输出流 BufferedWriter(Writer out, int size): 使用基本流创建一个缓冲字符输出流, 设置缓冲区大小 特有方法: void newLine(): 写入一个换行符, 换行符自动根据当前系统确定 构造方法 :BufferedReader(Reader in): 使用基本流创建一个缓冲字符输入流 BufferedReader(Reader in, int size): 使用基本流创建一个缓冲字符输入流, 设置缓冲区大小 特有方法: String readLine(): 一次读一行字符串, "不包含换行符". 读到文件末尾返回null 构造方法: OutputStreamWriter(OutputStream out): 使用默认编码表创建转换流 OutputStreamWriter(OutputStream out, String charsetName): 使用指定编码表创建转换流 构造方法: InputStreamReader(InputStream in): 使用默认编码表创建转换流 InputStreamReader(InputStream in, String charsetName): 使用指定编码表创建转换流 概述: 序列化: 内存中的对象转换为字节序列, 以流的方式写入到磁盘的文件中 反序列化: 磁盘文件中的字节序列, 以流的方式读取到内存中变成对象 (1) 对象序列化流: ObjectOutputStream 构造方法:ObjectOutputStream(OutputStream out) 特有方法: void writeObject(Object obj): 将对象写出 (2) 对象反序列化流: ObjectInputStream 构造方法:ObjectInputStream(InputStream in) 特有方法:Object readObject(): 读取对象 八 transient瞬态关键字: 避免属性序列化 概述: static 修饰的成员变量属于类不属于对象, 所以不能序列化 transient 修饰的成员变量, 不能被序列化 2. PrintStream不会抛出IOException 3. 有特殊方法 print(), println(), 可以输出任意类型的值, 原样输出 PrintStream(File file): 创建字节打印流, 输出到一个文件 PrintStream(OutputStream out): 创建字节打印流, 输出到一个字节输出流 PrintStream(String fileName): 创建字节打印流, 输出到一个文件路径
|
|