多线程+IO流
文章平均质量分 58
多线程+IO流的一些笔记
layman .
蒙多,想娶纳尔就娶纳尔......
展开
-
Java IO流之序打印流【七】
1.概述平时我们在控制台打印输出,是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。java.io.PrintStream类 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。它还提供其他两项功能。与其他输出流不同,PrintStream 永远不会抛出 IOException;而是,异常情况仅设置可通过 checkError 方法测试的内部标志。另外,为了自动刷新,可以创原创 2021-03-15 15:33:29 · 571 阅读 · 1 评论 -
Java IO流之字符缓冲流(源码注释)【四】
1 BufferedWriter【字符缓冲输出流】java.io.BufferedWriter待补充。2 BufferedReader【字符缓冲输入流】java.io.BufferedReader待补充。原创 2021-03-12 22:54:42 · 766 阅读 · 0 评论 -
Java IO流之字节缓冲流(源码注释)【三】
1 概述缓冲流,也叫高效流,是对字节流(FileOutputStream 和 FileInputStream),字符流(FileReader和FileWriter)的增强。缓冲流按照数据类型分类:字节缓冲流:BufferedOutputStream,BufferedInputStream。字符缓冲流:BufferedWriter,BufferedReader。缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。原创 2021-03-10 10:47:40 · 689 阅读 · 1 评论 -
java IO流之属性集Properties【八】
1.概述java.util.Properties 继承于 Hashtable,用来表示一个持久的属性集合。Properties集合是唯一一个和IO流相结合的集合,可以保存在IO流中,也可以从IO流中加载。使用store()方法,可以把集合中的临时数据,持久化存储到硬盘中。使用load()方法,可以把硬盘中的文件,读取到集合中使用。Properties集合是一个双列集合,使用键值结构存储数据,key和value默认都是字符串,且Key唯一。该类被许多Java类使用,比如获取系统属性。Syst原创 2021-03-15 15:36:13 · 582 阅读 · 1 评论 -
Java IO流之字符流【二】
1. 概述如果使用字节流读取中文。当GBK编码时,中文占用2个字节,当使用UTF-8时,中文占用3个字节。因此字节流无法读取完整的字符,有可能出现乱码。在这样的基础上,java的字符流应运而生。2.字符流类图结构2.1 【字符输出流】Writer2.2 字符输入流【Reader】java.io.Reader是用于读取字符流的抽象类,是表示字符输入流的所有类的超类。它定义了字节输出流的基本共性功能方法。子类必须实现的方法只有 read(char[], int, int) 和 close()。原创 2021-03-08 22:02:44 · 604 阅读 · 0 评论 -
Java IO流之转换流【五】
1 字符编码和字符集计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为 编码 。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为 解码 。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。编码:字符(看懂) --> 字节(看不懂)。解码:字节(看懂) --> 字符(看不懂)。1.1原创 2021-03-14 16:50:53 · 582 阅读 · 0 评论 -
Java IO流之字节流【一】
1.IO 概述生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是存储在哪些设备呢?内存、硬盘、外接设备(移动硬盘,U盘)等等。数据的传输可以看做是数据的流动,按照流动的方向,以内存为基准,分为输入流input 和输出流output ,即流向内存是输入流,流出内存的输出流。Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫原创 2021-03-07 16:31:45 · 1750 阅读 · 5 评论 -
java之递归【通俗易懂】
概念递归:指在当前方法内调用自己。递归的分类:直接递归:方法直接调用自己。比如方法A调用方法A间接递归:方法间接调用自己。比如A方法调用B方法,B方法调用C方法,C方法调用A方法。注意事项:递归一定要有结束条件,否则会无限递归,直至栈内存溢出。虽然递归有结束条件,但是递归次数太多,也会发生栈内存溢出。构造方法,禁止递归(直接编译报错,因为如果允许无限new对象,会导致堆内存溢出。)为什么会栈内存溢出:代码演示:public class Demo01DiGui { public原创 2021-03-06 12:22:09 · 753 阅读 · 3 评论 -
Java IO流之序列化流【六】
1.概述Java语言 提供了一种对象序列化的机制。用一个字节序列表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据、类型和存储的数据信息,都可以用来在内存中创建对象。2.ObjectOutputStream类java.io.ObjectOutputStream 类是对象的序列化流,可以将 Java 对象的基本数据类型和图形写入 O原创 2021-03-14 20:37:34 · 1772 阅读 · 1 评论 -
java语言获取系统硬盘容量和内存容量
使用到的方法java.io.File的三个方法如下:public static File[] listRoots() : 获取系统盘符。 public long getTotalSpace() : 返回此抽象路径名指定的分区大小(以字节为单位)。public long getUsableSpace() : 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。代码示例package com.hanyxx.file;import com.sun.management.OperatingSyst原创 2021-03-06 09:03:32 · 4014 阅读 · 6 评论 -
java之File类【详解】
概述java.io.File是文件和目录路径名的抽象表现形式,其中定义了一些与平台无关的方法来操作文件,主要用于文件和目录的创建、查找和删除等操作。java.io.File既可以表示文件,也可以表示目录(文件夹)。很多应用场景需要使用到java.io.File类,比如说查看文件的修改日期,文件的类型、目录、大小和读写权限,文件上传与下载,文件的创建、删除、检索以及备份等等。java.io.File操作的是文件属性,并非文件内容。File 类的实例不可变,一旦创建了一个File对象,那么它表示的抽象原创 2021-03-05 20:30:58 · 874 阅读 · 1 评论 -
java之等待唤醒机制(线程通信)
前言多个线程在处理同一个资源,但是处理的动作(线程任务)不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程通信多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且希望他们有规律的执行, 那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据的目的。如何保证线程通信有效利用资源多个线程在处理同一个资原创 2021-03-05 00:53:56 · 570 阅读 · 0 评论 -
java之线程状态
线程状态概述当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中, 有几种状态呢?在API中 java.lang.Thread.State 这个枚举中给出了六种线程状态。这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析线程状态详细说明NEW(新建)线程刚被创建,但是并未启动。还没调用start方法。Runnable(可运行)线程可能正在运行,也可能没有,这取决于系统处理器。Blocked(阻塞)等待原创 2021-03-04 11:29:42 · 512 阅读 · 4 评论 -
java代码演示线程安全【卖票】
线程安全问题多个线程同时运行相同的代码,有可能造成某些变量和预期的不一样。演示【电影院卖票】:假设要播放的电影是《孙悟空三打白骨精》,假设电影院有50个座位 (本场电影卖50张票)。模拟电影院的售票窗口,实现多个窗口同时卖票(多线程)。代码演示:import lombok.SneakyThrows;/** * @author layman */public class Selling01 { public static void main(String[] args) {原创 2021-03-03 11:16:23 · 860 阅读 · 4 评论 -
Thread之线程池
import lombok.SneakyThrows;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * @author layman */public cla...原创 2021-02-11 18:36:40 · 566 阅读 · 1 评论 -
Thread之ReentrantReadWriteLock
目录前言读锁不互斥,可同时获得运行结果写锁互斥,不可同时获得结论前言读锁不互斥,可同时获得import lombok.SneakyThrows;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @author layman * @date 2021/2/9 */public class Demo07 { public static void main(String[] args) { D原创 2021-02-11 15:17:42 · 526 阅读 · 0 评论 -
Thread之Callable接口
Callable接口说明简单示例import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @author layman * @date 2021/2/10 */public class Demo01 { public static void main(String[] args) t原创 2021-02-10 12:43:26 · 856 阅读 · 1 评论 -
Thread之ReentrantLock与Condition
目录简单演示运行结果synchronized 进行同步互斥控制运行结果修改为ReentrantLock进行同步互斥运行结果结论ReentrantLock与condition实现wait和notifyReentrantLock与condition实现选择性唤醒运行结果结论ReentrantLock与condition实现生产者与消费者ReentrantLock之公平锁和非公平锁简单演示import java.util.concurrent.locks.Lock;import java.util.co原创 2021-02-09 21:37:47 · 557 阅读 · 1 评论 -
Thread之ThreadLocal类
前言ThreadLocal具有隔离性/** * 验证ThreadLocal隔离性 * @author layman */public class Demo17 { public static void main(String[] args) { ThreadLocal<String> threadLocal = new ThreadLocal<>(); Demo17ThreadA threadA = new Demo17Threa原创 2021-02-09 13:35:52 · 505 阅读 · 0 评论 -
Thread之join方法
前言在很多情况下,都由主线程创建并运行子线程,如果子线程中需要大量的耗时操作,主线程往往早于子线程结束。如果主线程想等待子线程执行完成后再执行。比如子线程处理一个数据运算,而主线程想获取这个数据,可以用join方法。public final void join() throws InterruptedException等待该线程终止。抛出:InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态被清除。join()public class原创 2021-02-09 13:06:59 · 800 阅读 · 0 评论 -
Thread之线程通信(wait和notify)
目录线程通信的定义轮询实现结论wait和notify实现wait方法nofify方法结论补充说明线程通信的定义线程是程序中独立的个体,但这些个体如果不经过处理就不能成为一个整体。线程间的通信就是使它们成为整体的方案之一。可以说通过线程通信,线程之间的交互性会更强大,能够大大提高CPU的复用率,同时也可以对线程任务进行有效的把控和监督轮询实现import lombok.SneakyThrows;import java.util.ArrayList;import java.util.List;原创 2021-02-08 15:16:30 · 1737 阅读 · 3 评论 -
Thread之volatile关键字
当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“, 这里的”保证“ 是如何做到的?和 JIT的具体编译后的CPU指令相关吧?volatile特性内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。volatile的使用场景通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个轻量级的sychronize,因为不会引起线程的上下文切换,原创 2021-02-07 11:04:40 · 634 阅读 · 0 评论 -
Thread之synchronized对象锁,脏读,锁重入
synchronized对象锁package com.hanyxx.thread;import lombok.SneakyThrows;/** * synchronized关键字会锁住整个对象中被synchronized修饰的方法。 * 运行结果:methodOne方法执行,2秒后,methodTwo方法执行 * @author layman * @date 2021/2/5 */public class Demo06 { public static void main(Str原创 2021-02-05 22:38:01 · 551 阅读 · 0 评论 -
Thread之守护线程和线程安全问题
守护线程package com.hanyxx.thread;import lombok.SneakyThrows;/** * @author layman * @date 2021/2/5 */public class ThreadDaemon04 { public static void main(String[] args) throws InterruptedException { demo04 demo04 = new demo04();原创 2021-02-05 17:35:22 · 584 阅读 · 0 评论 -
Thread之线程状态和suspend()
package com.hanyxx.thread;import lombok.Data;/** * suspend()是一个过时方法。 * 它会使线程进入暂停状态,如果方法有synchronized修饰,那么它会持有锁,造成死锁 * @author layman * @date 2021/2/5 */public class ThreadSuspend { private static demo01 demo01 = new demo01(); public static原创 2021-02-05 13:20:40 · 1579 阅读 · 0 评论