全新552B架构全面超越V4 Pro,闲时缓存命中价降至每百万0.02元。 [..]
Read More面向字节流时,最常用的是文件字节流:FileInputStream / FileOutputStream,按顺序读写本地磁盘文件。再往上套过滤流,就能按基本类型写二进制;最外层则是 System.in / System.out / System.err 三套标准流。 下面几个例子都在教材编号 10-…
字节流以字节为传输单位,读写 8 位数据。除了纯文本,还能处理图片、音频这类二进制文件。InputStream 和 OutputStream 是所有字节流的父类,同样都是抽象类。 程序里真正 new 出来的,一般是它们某个子类的对象;调用继承来的 read() / write(),就能对外设做输入输…
面向字符的输出流都是 Writer 的子类。和输入侧一样,Writer 是抽象类,真正写出文本要用 FileWriter、BufferedWriter 这些子类。 写文件时先构造输出流对象,再 write();带缓冲的写法还要在结束前 flush(),把缓冲区里剩下的字符真正落到文件上。 一、Wri…
字符流是按字符而不是按字节来读写的:源或目标通常是文本文件。java.io 里所有字符流的父类是 Reader 和 Writer,二者都是抽象类,实际工作要靠子类。 子类可以分成两类:直接对接数据源或目的地的叫节点流,在流上再做缓冲、转换等处理的叫处理流。本节先看面向字符的输入流。 一、Reader…
两个或两个以上线程要共享资源时,必须保证某一刻只有一条线程占用。这个过程叫同步(synchronization)。Java 在语言层面提供了支持。 关键概念是管程(也叫信号量 semaphore):一个互斥独占锁定,或称互斥体(mutex)。同一时刻只有一条线程能获得管程;其他试图进入已锁定管程的线…
同步方法能挡住其他线程同时进同一个对象,但还不够精巧。生产者一边造数据、消费者一边用,还要互相等对方干完——如果靠轮询死循环盯条件,会浪费大量 CPU。 Java 用 wait()、notify()、notifyAll() 做线程间通信。它们是 Object 的 final 方法,必须在 synch…
到目前为止只用到两条线程:主线程和一个子线程。程序可以按需要创建更多。下面这个例子创建了三个子线程 One、Two、Three。 每个 NewThread 在构造函数里 start(),从 5 数到 1,每次睡 1 秒。主线程用 sleep(10000) 睡十秒,确保自己最后结束。 线程 做什么 等…
多数情况通过实例化一个 Thread 对象来创建线程。Java 定义了两种方式:实现 Runnable 接口,或继承 Thread 类。 方式 入口 适用 implements Runnable new Thread(this, name) 再 start() 不必改 Thread 其他方法时优先 …
Java 程序一启动,立刻有一条线程在跑,通常叫主线程(main thread),因为它从程序开始就执行。 主线程重要在两头:它是产生其他子线程的线程;通常它必须最后结束,因为它还要做各种关闭动作。 主线程虽是自动创建的,但仍可用 Thread 对象控制。先调公有静态方法 currentThread…
Java 运行时在很多方面依赖线程,类库设计也按多线程来考虑。实际上 Java 用线程让整个环境异步,避免 CPU 空转浪费。 对照单线程更容易看清优势。单线程常用轮询事件循环:一条线程在无限循环里询问事件序列,决定下一步。一旦某处理程序占住,别的事件只能等。线程因为等资源阻塞时,整个程序停住。 一…