![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Thinking in java
怡心摸鱼人
这个作者很懒,什么都没留下…
展开
-
thinking in java (三十八) ----- 多线程04之synchronized关键字
synchronized原理在java中,每一个对象有且只有一个同步锁,这也意味着,同步锁因为对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁,例如synchronized(obj)就获取了obj这个对象的同步锁。不同线程对同步锁的访问是互斥的,就是说,在某一个时间点,一个同步锁只能被一个线程获取,通过同步锁我们可以在多线程中,实现线程的互斥访问...原创 2018-11-20 08:57:23 · 144 阅读 · 0 评论 -
thinking in java (二十七) ----- IO之CharArrayWriter(字符数组输出流)
CharArrayWriter介绍用于写入字符数据,继承于writer,操作的是单位为字符。源码分析CharArrayWriterpackage java.io;import java.util.Arrays;public class CharArrayWriter extends Writer { // 字符数组缓冲 protected char...原创 2018-11-12 18:58:09 · 127 阅读 · 0 评论 -
thinking in java (二十七) ----- IO之CharArrayReader(字符数组输入流)
CharArrayReader介绍CharArrayReader是字符输入流,用于读取字符数组,它继承于Reader,操作的数据是字符为单位。源码分析Reader是CharArrayReader的父类,我们先看一下Reader的源码,然后再分析CharArrayReader。Reader源码package java.io;public abstract class...原创 2018-11-12 16:49:15 · 163 阅读 · 0 评论 -
thinking in java (二十六) ----- System.out.println("hello world")原理
我们首先来看System.out.println("hello world")的流程,先看看System类中out的定义public final class System { ... public final static PrintStream out = null; ...}从中,我们可以发现:1,out是System中的一个静态变量2,out是...原创 2018-11-12 15:54:12 · 623 阅读 · 0 评论 -
thinking in java (二十三) ----- IO之FileDescriptor
FileDescriptor简介FileDescriptor是文件描述符FileDescriptor可以被用来表示开放文件,开放套接字等以FileDescriptor表示文件来说,当FileDescriptor表示某文件的时候,我们可以通俗地将FileDescriptor看成是该文件,但是我们不能直接通过FileDescriptor来操作该文件,如果需要通过FileDescript...原创 2018-11-08 09:59:27 · 130 阅读 · 0 评论 -
thinking in java (三十二) ----- IO之 PrintWriter
介绍PrintWriter 是字符类型的打印输出流,它继承于Writer。PrintWriter用于向文本输出流打印对象的格式化表示形式。它实现在 PrintStream 中的所有 print 方法。源码package java.io;import java.util.Objects;import java.util.Formatter;import java.u...原创 2018-11-13 12:04:39 · 117 阅读 · 0 评论 -
thinking in java (三十一) ----- IO之 BufferedWriter
介绍BufferedWriter 是缓冲字符输出流。它继承于Writer。BufferedWriter 的作用是为其他字符输出流添加一些缓冲功能。源码分析package java.io;public class BufferedWriter extends Writer { // 输出流对象 private Writer out; // 保存...原创 2018-11-13 11:44:22 · 145 阅读 · 0 评论 -
thinking in java (三十) ----- IO之 BufferedReader
BufferedReader介绍BufferedReader是缓冲字符流,继承于Reader作用是为其他的流添加缓冲功能源码分析package java.io;public class BufferedReader extends Reader { private Reader in; // 字符缓冲区 private char cb[];...原创 2018-11-13 11:37:35 · 188 阅读 · 0 评论 -
thinking in java (三十) ----- IO之 FileReader和FileWriter
介绍FileReader是用于读取字符流的类,继承于InputStreamReader,如果要读取原始字节流,需要使用InputStream。FileWriter是用于写入字符流的类,继承于OutputStreamWriter,如果要写入原始字节流,需要使用OutptuStream。源码FileReaderpackage java.io;public class ...原创 2018-11-13 10:07:46 · 154 阅读 · 0 评论 -
thinking in java (二十五) ----- IO之PrintStream
PrintStream介绍PrintStream是打印输出流,继承自FilterOutputStream,PrintStream用来装饰其他的流,为其他流添加打印功能,使其能够方便打印各种数据表现形式。与其他流不同,PrintStream永远不会抛出IOException,他产生的IOException会被自身的函数所捕获并设置错误标记,另外,PrintStream提供了自动flu...原创 2018-11-10 20:17:09 · 132 阅读 · 0 评论 -
thinking in java (二十八) ----- IO之PipedReader和PipedWriter
PipedReader和PipedWriter介绍PipedWriter是字符管道输出流,继承于WriterPipedReader是字符管道输入流,继承于Reader PipedReader和PipedWriter的作用是可以通过管道之间进行线程间的通讯,在使用管道的时候,必须将两者配套使用PipedReader和PipedWriter源码分析PipedReader源码...原创 2018-11-12 19:59:27 · 164 阅读 · 0 评论 -
thinking in java (三十九) ----- 多线程05之线程等待和唤醒
wait() notify()notifyAll()简介这三个方法都是定义在Object里面,wait()的作用是让线程进入等待状态,同时wait也会释放当前线程所持有的锁,而notify和notifyAll的作用是唤醒当前对象上的等待线程,notify是唤醒单个线程,而notifyAll 是唤醒所有线程。Object中关于等待唤醒的API详细信息如下:notify() 唤醒在此对...原创 2018-11-20 15:40:51 · 123 阅读 · 0 评论 -
thinking in java (三十七) ----- 多线程03之Thread中start()和run()的区别
start()方法和run()方法的区别说明start()方法:他的作用是启动一个新的线程,新线程会执行相应的run()方法,start()不能被重复调用。run()方法:run方法就是一个普通的成员方法样,可以被重复调用,单独调用run方法的话,会在当前线程中执行run方法,而不会启动新线程。用代码说明class MyThread extends Thread{ ...原创 2018-11-19 19:54:56 · 115 阅读 · 0 评论 -
thinking in java (三十六) ----- 多线程02之常用的实现多线程的方法
概要常用的实现多线程有两种方法,1:继承Thread类,2:实现Runnable接口。之所以说是常用,是因为还可以使用JUC(java.util.concurrent)包中的线程池来实现多线程。首先我们对常用的Thread类和Runnable接口进行了解说明。Thread类和Tunnable接口简介Runnable是一个接口,该接口中只包含了run方法,定义如下pub...原创 2018-11-19 17:02:21 · 188 阅读 · 0 评论 -
thinking in java (三十五) ----- 多线程01之基础概念
相关概念线程状态图说明:一共有五种状态1,新建状态:线程对象被创建以后,自动就进入了新建状态,比如Thread thread = new Thread()2,就绪状态:线程对象被创建以后,其他线程调用了该对象的start方法,从而来启动该线程,例如,thread.start(),处于就绪状态的线程,随时都可能被CPU调度执行3,运行状态:线程获取了CPU权限,进行执行,需要...原创 2018-11-19 13:01:06 · 100 阅读 · 0 评论 -
thinking in java (三十三) ----- String详解
String介绍String是java中的字符串,继承于CharSequence。String类包含的API接口非常多,我们对其进行了分类,并且都给出了演示程序。String个CharSequence关系String继承于CharSequence,也就是说String是CharSequence类型,CharSequence是一个接口,只包括length().charAt(),su...原创 2018-11-16 12:28:41 · 149 阅读 · 0 评论 -
thinking in java (四十四) ----- 多线程10之线程优先级和守护线程
线程优先级的介绍线程优先级有1-10,默认优先级为5,高优先级的线程更容易抢占到CPU,但是并不绝对java中有两种线程,用户线程和守护线程,可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。用户线程一般用户执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务。需要注意的是:Java虚拟机在“用户线程”都结...原创 2018-11-20 20:13:30 · 140 阅读 · 0 评论 -
thinking in java (四十三) ----- 多线程09之interrupt()和线程终止方式
interrupt和线程终止简介interrupt()的作用是中断本线程jdk中关于interrupt的简介是:本线程中断自己是被允许的,其他线程调用本线程的interrupt方法,会通过checkAccess()检查权限,这有可能抛出SecurityException异常,如果线程是处于阻塞状态,调用线程的wait,join,sleep等进入阻塞状态,此时用interrupt中断该...原创 2018-11-20 19:52:56 · 131 阅读 · 0 评论 -
thinking in java (四十二) ----- 多线程08之join
join()介绍join() 定义在Thread.java中。join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行,阻塞主线程// 主线程public class Father extends Thread { public void run() { Son s = new Son(); s.start(); ...原创 2018-11-20 17:02:39 · 136 阅读 · 0 评论 -
thinking in java (四十一) ----- 多线程07之线程休眠
sleep()介绍sleep()定义在Thread类中,作用是让当前线程休息,即当前线程会从运行状态转为阻塞状态吗,sleep会规定时间,线程休眠的时间大于该时间,就会被重新唤醒,变成就绪状态,等待CPU的调度执行示例package test;//SleepTest.java的源码class ThreadA extends Thread{ public ThreadA(...原创 2018-11-20 16:28:24 · 133 阅读 · 0 评论 -
thinking in java (四十) ----- 多线程06之线程让步
yield()介绍yield()作用是线程让步,他能让线程由运行状态进入就绪状态,从而让具有相同优先级的等待线程获取执行权。但是并不能保证当前线程让步以后,具有同优先级的线程一定能获取执行权,也有可能是当前让步线程又进入到“运行状态”继续运行示例// YieldTest.java的源码class ThreadA extends Thread{ public Thre...原创 2018-11-20 16:02:13 · 139 阅读 · 0 评论 -
thinking in java (二十四) ----- IO之BufferedOutputStream
BufferOutputStream介绍BufferOutputStream是缓冲输出流,它继承于FilterOutputStream。BufferOutputStream的作用是另一个输出流提供“缓冲功能”。源码分析package java.io;public class BufferedOutputStream extends FilterOutputStream...原创 2018-11-10 19:44:57 · 484 阅读 · 0 评论 -
thinking in java (二十四) ----- IO之BufferedInputStream
BufferedInputStream介绍BufferedInputStream是缓冲输入流,作用是为另外一个输入流添加缓冲功能,以及mark reset功能。本质上,缓冲功能是通过一个内部缓冲区数组实现的,例如在新建某输入流对应的BufferedInputStream后,当我们通过read方法读取输入流的数据时,BufferedInputStream会将输入流的数据分批地填入到缓冲区...原创 2018-11-10 12:38:49 · 163 阅读 · 0 评论 -
thinking in java (二十九) ----- IO之 InputStreamReader和OutputStreamWriter
InputStreamReader和OutputStreamWriter介绍InputStreamReader和OutputStreamWriter是字节通往字符的桥梁,它使用指定的charset读取字节并将其解码为字符。InputStreamReader的作用是将字节输入流转换为字符输入流,继承于Reader OutputStreamWriter的作用是将字节输出流转换为字符输出...原创 2018-11-12 23:54:54 · 140 阅读 · 0 评论 -
thinking in java (十四) ----- 集合之Stack
stack很简单,继承与Vectorstack介绍stack简介stack是栈,特性是先进后出(FILO)java中的stack是继承自Vector(矢量队列)由于Vector是数组实现的,这就意味着stack也是通过数组实现的 ,而非链表。 stack继承关系java.lang.Object↳ java.util.AbstractCollection<...原创 2018-10-29 18:50:48 · 91 阅读 · 0 评论 -
thinking in java (十三) ----- 集合之Vctor
Vector介绍简介是一种矢量队列,继承与AbstractList,实现了List,RandomAccess,Cloneable等接口继承了AbstractList,实现了List,所以是一个队列,支持相关的增删改遍历操作实现了RandomAccess接口,提供了随机访问功能。RandomAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中我们可...原创 2018-10-29 16:20:21 · 228 阅读 · 0 评论 -
thinking in java (十二) ----- 集合之LinkedList
LinkedList介绍LinkedList简介LinkedList是一个继承与AbstractSequentialList的双向链表,他也可以当做堆栈,队列或者双向队列进行操作。LinkedList实现了List接口,能进行队列操作LinkedList实现Deque接口,即能将LinkedList当做双向队列使用LinkedList实现了Cloneable接口,Link...原创 2018-10-29 15:15:06 · 79 阅读 · 0 评论 -
thinking in java (七) ----- 内部类(二,Inner classes)
深入理解内部类为什么成员内部类可以无条件地访问外部类成员?成员内部类甚至可以访问private的外部类成员,那么这究竟是怎么实现的呢?下面通过字节码文件来一探究竟。下面是Outer.java的代码:public class Outter { private Inner inner = null; public Outter() { } ...原创 2018-10-19 10:15:30 · 244 阅读 · 1 评论 -
thinking in java (六) ----- 内部类(一,Inner classes)
将某个class定义置于另一个class定义之中是可行的,这就是内部类。内部类基础内部类一般来说包括以下几种:成员内部类,局部内部类,匿名内部类,静态内部类。成员内部类成员内部类是最普通的内部类,定义在一个外部类的内部,如下:class Circle { double radius = 0; public Circle(double radius...原创 2018-10-18 22:55:28 · 134 阅读 · 0 评论 -
thinking in java (四) ----- static与this关键字
static static代表什么static表示“全局”或者“静态”的意思,用来修饰成员变量或者方法,也可以修饰代码块。被static修饰的成员会在类加载的时候进行初始化与空间分配,被设置为静态后,成员会被存放在静态存储空间,全局共享一个值。因此访问被static修饰的成员时,可以使用className直接调用。被static修饰的不依赖于对象,因为他先与对象生成,但是可以被对象...原创 2018-10-09 16:16:15 · 162 阅读 · 0 评论 -
thinking in java (三) ----- 接口与抽象类
接口的抽象类给我们提供了接口和实现分离更加结构化的方法接口和抽象类是java中对抽象概念进行定义的两种机制,正是因为他们的存在,才赋予了java强大的面向对象的能力。他们之间对于抽象有很大的相似,但是也有一些不同抽象类前面我们说过万物皆对象,对象是通过类来描述的,但并不是所有的类都是用来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它...原创 2018-10-08 21:14:44 · 137 阅读 · 0 评论 -
thinking in java (五) ----- equals()方法
equals()equals()方法用来比较两个对象是否相等,父类是Object。其中在String中的equals()源代码如下y对象都是由引用reference和对象实例组成的。“==”是用来比较两个引用类型的reference,所以Object中的equals()方法是比较两个引用类型的reference是否相等。和"=="的效果是一样的。但是我们可以看到源代码中,如果对象是...原创 2018-10-18 16:30:31 · 149 阅读 · 0 评论 -
thinking in java (二) ----- 多态
面向对象的三大特性:封装,继承,多态。封装封装将类的内部信息隐藏,不允许外部直接访问(private),通过该类提供的方法(get(),set())来访问操作类隐藏的信息。隐藏了类的信息,留出了访问操作的接口。继承为了复用父类的代码,两个类如果有is-a关系,子类就可以继承父类。多态多态就是指:方法中定义的引用变量(形参reference)指向的具体类型,和通过该ref...原创 2018-10-07 23:28:38 · 117 阅读 · 0 评论 -
thinking in java (十五) ----- 集合之HahsMap
HashMap介绍HashMap简介HashMap是一个散列表,存储的内容是键值对映射(key-value)k-vHashMap继承于AbstractMap,实现了Map,Cloneable,Serializable接口HashMap的实现是不同步的(线程不安全)HashMap的实例有俩参数影响性能:“初始容量”和“加载因子”,容量是哈希表中通的数量,初始容量只是哈希表在创建...原创 2018-10-29 22:09:36 · 81 阅读 · 0 评论 -
thinking in java (八) ----- 数组(Array)
一般来说,程序会产生新的对象,有的时候只能到执行期,才能具体知道产生了多少对象,为了存放这些对象的存放(或者说是reference的存放),程序员必须提供对象的存放容器。数组(Array)数组是java用来存放以及随机访问一连串对象的各种做法中,最有效率的一种。数组是简单的线性序列,其中元素能够被快速访问,不过缺点是:当你产生数组后,你不能改变其size。在java中,数组是一个比较特...原创 2018-10-24 16:07:23 · 118 阅读 · 0 评论 -
thinking in java (二十二) ----- IO之序列化
序列化的作用和用途序列化,就是为了保持对象的状态,而与之对应的反序列化,则可以把对象的状态再读取出来,简而言之:序列化/反序列化,是JAVA提供的一种专门用于保存/恢复对象状态的机制。一般在以下几种情况我们会使用序列化:1.当你想把内存中的对象状态保存到一个文件或者数据库中时2,当你想用套接字在网络上传送对象的时候3,当你想用RMI传输对象的时候演示程序1...原创 2018-11-02 16:08:20 · 108 阅读 · 0 评论 -
thinking in java (二十一) ----- IO之(ObjectOutputStream和ObjectInputStream)
ObjectOutputStream和ObjectInputStream的作用是:对基本数据和对象进行序列化操作支持。创建“文件输出流”对应的ObjectOutputStream对象,该ObjectOutputStream对象能提供对“基本数据或对象”的持久存储,当我们需要读取这些存储的基本数据或对象的之后,可以创建“文件输出流”对应的ObjectInputStream,进而读取出这些“基本数...原创 2018-11-02 10:03:57 · 101 阅读 · 0 评论 -
thinking in java (二十) ----- IO之管道(PipedOutputStream和PipedInputStream)
介绍PipedInputStream和PipedOuputStream管道输入流和管道输出流他的作用是让多线程可以通过管道进行线程间的通信,在使用管道通讯时候,必须将两者配套使用。使用管道的大致流程是:我们在进程A中向PipedOutputStream中写入数据,然后这些数据会自动发送到与PipedOutputStream对应的IPipedInputStream中,进而储存在Piped...原创 2018-11-01 21:53:13 · 186 阅读 · 0 评论 -
thinking in java (十九) ----- IO系列总览
io简介java io是为了实现“文件”,“控制台”,“网络设备”这些输入输出设备之间的通信而设计的系统。例如,对于一个文件,我们可以打开进行读取与输出。在java1.0的时候,java提供的类都是以字节(byte)为单位,到了java1.1,为了国际化,添加了许多以字符(Unicode)为单位进行操作的类IO中我们常说到的一个概念是“流”,所谓“流”就是一种抽象的数据总称,本质是为了...原创 2018-11-01 20:48:11 · 373 阅读 · 0 评论 -
thinking in java (十七) ----- 集合之List总结
List概括首先回顾一下关系图Lsit是一个接口,继承与Collection接口,它代表的是有序的队列 AbstractList是一个抽象类,它继承于AbstractCollection,AbstractList实现List接口中除了size(),get(index)之外的函数 AbstractSequentialList是一个抽象类,继承于Abstract。AbstractS...原创 2018-10-31 02:23:24 · 115 阅读 · 0 评论