java
文章平均质量分 70
sophia__yu
想要获得,便得付出。
展开
-
Java中Stream操作
在JDK1.8出现Stream。通常在数组或者集合的基础上创建stream,stream不会专门存储数据,对stream的操作也不会影响到创建它的数组和集合。public interface Stream<T> extends BaseStream<T, Stream<T>> Stream接口中常用方法如下:通过集合创建Stream对象:list.st...原创 2019-02-13 17:22:40 · 456 阅读 · 0 评论 -
反射(Constructor、Field、Method、类加载器)
一:什么是反射在认识反射之前,首先回顾下什么是正向处理。如果我们需要实例化一个对象,首先需要导入这个类的包,在这个包中找这个类:package CODE.反射;import java.util.Date;public class Fan { public static void main(String[] args) { Date date =new Date(...原创 2018-12-01 19:53:34 · 354 阅读 · 0 评论 -
Condition的await和signal原理详解(Condition下的生产消费模型)
Condition的await和signal与Object的wait与notify区别:任何一个Java对象都天然继承于Object类,在线程间实现通信会用到Object的几个方法,如wait(),wait(long timeout),wait(long timeout,int nanos)与notify(),notifyAll()这几个方法实现等待通知机制,同样的,在Java Lock体系有同...原创 2018-11-27 14:17:15 · 4652 阅读 · 1 评论 -
Java----IO(File OutputStream InputStream Writer Reader)
在Java中IO的核心组成是5个类(File、OutputStream、InputStream、Reader、Writer)和一个接口(Serializable)。IO需要导入的包的是java.io。并在是阻塞式IO。File操作文件类 java.io包中,FILE类是唯一 一个与文件本身操作(创建、删除、取得信息)有关,与文件内容无关的程序类。FILE的基本使用java.io.File类是...原创 2018-12-02 14:35:41 · 299 阅读 · 0 评论 -
深入理解ReentrantLock/ReentrantReadWriteLock
一:ReentrantLock如何实现可重入ReentrantLock实现Lock接口的可重入子类。可重入的意思就是一个线程在获取锁的时候,如果该线程已经获取到锁则直接获取成功,不会被阻塞;由于会获取n次锁,那么在锁释放的时候也需要释放n次,才能完全释放成功。可重入锁是在tryAcquire()阶段实现的,为什么是tryAcquire阶段可以参考这篇博客:链接源码如下:final boo...原创 2018-11-25 20:43:49 · 1039 阅读 · 0 评论 -
深入理解acquire和release原理源码及lock独有特性acquireInterruptibly和tryAcquireNanos
我们在调用Lock的lock上锁时,其实调用的是AQS的模板方法acquire();在调用lock的unlock时其实调用的是release方法。public void unlock() { sync.release(1); }...原创 2018-11-21 17:51:32 · 10303 阅读 · 1 评论 -
Java---Lock锁(AQS与Lock区别)
什么是Lock锁?在Java中锁是出现是为了防止多个线程访问同一资源,锁有内建锁(synchronized),synchronized关键字实现锁是隐式加解锁,在JDK5后,java.util.concurrent包中增加了lock接口,它提供了和synchronized一样可以防止多个线程访问同一资源,但是lock锁需要手动加锁解锁,也提供了synchronized没有的同步特性(后文会叙述)...原创 2018-11-21 08:49:38 · 2938 阅读 · 1 评论 -
生产者消费者模型(wait/notify/notifyAll)
生产者和消费者之间的阻塞队列生产者消费者模型在实际生活中很多运用。对我们自己来说就是一个消费者,比如我们需要买奥利奥饼干,我们会去超时买,并不是直接从厂商那里买,而厂商把奥利奥生产结束后会送往各个超市进行售卖,超市就是我们消费者和生产者之间媒介。这个超市在操作系统定义为阻塞队列。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞...原创 2018-11-20 15:09:53 · 523 阅读 · 0 评论 -
锁的优化(偏向锁、轻量级锁、重量级锁,CAS)
为什么出现CAS?我们知道synchronized关键字不论是实现同步方法还是同步代码块,都需要首先执行monitorenter获取到锁对象的监视器monitor,同一时刻只有一个线程可以获取到锁对象的monitor监听器,退出时需要执行monitorexit进行解锁。monitor机制是JDK1.6之前synchronized(内建锁)底层原理,又称为JDK1.6重量级锁。线程的阻塞和唤醒均...原创 2018-11-18 19:36:02 · 4064 阅读 · 0 评论 -
守护线程
什么是守护线程?原创 2018-11-12 13:24:12 · 138 阅读 · 0 评论 -
线程优先级(线程具有继承性、setPriority、getPriority)
什么 是线程优先级?线程优先级是指优先级越高,越有可能先执行,但只是建议先执行,具体什么时候执行由系统决定。设置线程优先级public final void setPriority(int newPriority) ;取得线程优先级public final int getPriority( );在Thread类中定义了三种静态成员变量:public final static...原创 2018-11-12 11:10:13 · 2005 阅读 · 0 评论 -
线程停止(stop/intrrupt)
使一个线程停止有下列三种方式:使用标记位(设置flag)停止线程;调用stop方法强制停止线程;Thread类的interrupt方法;一:使用falg停止线程////使用标记位class Mythread3 implements Runnable{ private boolean flag=true; public void run() { ...原创 2018-11-11 23:10:00 · 3761 阅读 · 0 评论 -
多线程常用操作方法(sleep、yield、join)
线程的命名与取得线程的命名:通过构造方法在创建线程时设置线程名称直接继承Thread类: public Thread (String name);Runable或者Callable接口实现多线程: public Thread (Runable target,String name);在创建线程之后设置线程名称public final synchronized void s...原创 2018-11-11 20:16:42 · 317 阅读 · 0 评论 -
如何实现多线程?实现多线程为什么要调start,而不是run方法?(继承Thread类、实现Ruable接口、Callable<V>)
什么是进程?操作系统中一个程序的执行周期(从打开到关闭)。进程是具有一个或多个线程的线程组。什么是线程?一个进程可以同时执行多个任务,任务就是线程,一个进程至少有一个线程。线程运行在进程内部,线程是轻量级进程。进程和线程比较:与进程相比,线程更加轻量级,创建,撤销一个线程比启动、撤销一个进程开销小的多。一个进程中的所有线程共享此进程的所有的资源;没有进程就没有线程,进程一旦终止...原创 2018-11-11 17:42:42 · 1336 阅读 · 1 评论 -
转换流(OutputStreamWriter/InputStreamReader) 文件拷贝 字符编码(乱码)
一:转换流&amp;lt;/fon在这篇博客中介绍了字节流和字符流:https://blog.csdn.net/sophia__yu/article/details/84678506其实可以将字节流转换为字符流,也就是转换流。转换流用于将底层的字节流转为字符流供子类使用。字节输出流–&amp;gt;字符输出流:OutputStreamWriter。 public OutputStreamWriter(...原创 2018-12-05 11:00:28 · 1104 阅读 · 0 评论 -
System对IO支持----System.out/System.in
这篇博客里介绍了打印流PrintSream类,PrintSream类的方法print()和println(),可以联想到系统输出System.out.println(),也及时说系统输出利用了IO流的模式完成。在System类中定义了3个操作的常量。标准输出(显示器):public final static PrintStream out;System.out错误输出:public fin...原创 2018-12-07 17:20:04 · 212 阅读 · 0 评论 -
内存操作流 打印流 打印流格式化输出
什么是内存流熟知的有文件流,也就是对文件进行IO处理,但IO操作也可在内存中,这种流称为内存操作流。文件流是以文件为操作终端,会产生文件(不论文件数据是否保存),但是内存流是以内存为操作终端,不会产生文件。内存流分为2类:1.字节内存流:ByteArrayInputStream、ByteArrayOutputStream2.字符内存流:CharArrayReader、CharArrayW...原创 2018-12-05 12:54:11 · 260 阅读 · 0 评论 -
Java中工具类---Collections
一般在Java中,普通类后加s即为工具类,Collections是Java中集合的工具类。列举Collections常用的方法:import java.util.ArrayList;import java.util.Collections;import java.util.List;public class TestCollections { public static vo...原创 2019-02-13 12:29:05 · 283 阅读 · 0 评论 -
Java中属性文件----Properties
在Java中*.properties文件是一种资源文件或者是属性文件,这个文件的信息是以键值对存储(key–value),一般通过Properties类编辑该文件信息。public class Properties extends Hashtable<Object,Object>读取属性文件信息: public synchronized void load(Reader rea...原创 2019-02-13 12:00:45 · 763 阅读 · 0 评论 -
Java中栈和队列
栈(Stack)–class入栈 public E push(E item)出栈 public synchronized E pop()观察栈顶元素 public synchronized E peek()实例:import java.util.Stack;public class TestStack { public static void main(String[] a...原创 2019-02-13 10:17:48 · 370 阅读 · 0 评论 -
Java中线程池
线程池在juc包下。创建线程4种方式:继承Thread、实现Runnable、Callable、创建线程池一:线程池优点1.降低资源消耗:通过重复利用已创建的线程,降低线程创建与销毁带来的损耗,手动创建线程:假如线程执行结束,就会销毁线程,损耗大;2.提高响应速度:当新任务到达时,任务不需要等待创建就可以立即执行;(线程池有空闲线程,只要有任务,就会利用这些空闲线程)3.提高线程的可管理性...原创 2019-02-17 20:53:17 · 403 阅读 · 0 评论 -
多线程练习
写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B…5152Z//写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B...5152Zclass Print{ private Integer num=1; private Integer flag=1; synchronized public void print...原创 2019-02-16 22:47:34 · 1306 阅读 · 1 评论 -
Java中深浅拷贝
一:浅拷贝:只有子类实现Cloneable接口才可以使用Object使用的clone方法。protected native Object clone() throws CloneNotSupportedException;浅拷贝是将原对象的信息拷贝,拷贝后的对象和原对象指向同一块空间。class Teacher { private String name; priva...原创 2019-02-15 19:34:05 · 2148 阅读 · 0 评论 -
Java内存模型和volatile(单例)
主内存和工作内存 Java内存模型的主要目标是定义程序中实例字段、静态字段和构成数组对象的元素的访问规则。Java内存模型规定了所有变量存储在主内存中,每条线程有自己的工作内存,工作内存保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中,而不能直接读写主内存中的变量。线程间变量值的传递需要通过主内存来完成。内存间交互操作 一个变量如何从主内存拷贝到工...原创 2019-02-15 18:23:16 · 325 阅读 · 0 评论 -
JVM--JVM简介,Java内存区域,垃圾回收器与内存分配
1.为什么Java可以跨平台?Java源代码经javac编译后成为二进制字节码的class文件,JVM解释执行c lass文件Java代码不是直接运行在CPU上,而是运行在Java虚拟机(JVM)正是因为运行在虚拟机,所以它的代码可以不用修改就能在不同的平台的JVM上运行,比如windows系统是windows的jvm,linux系统是linux的虚拟机。虚拟机必须支持解释字节码。...原创 2019-02-14 20:04:47 · 316 阅读 · 0 评论 -
Java类集---HasMap源码分析(resize和树化)HashtableTreeMap ConcurrentHashMap
Map集合一次性会保存两个对象,即键值对。Map集合:public interface Map&amp;amp;amp;amp;amp;amp;amp;lt;K,V&amp;amp;amp;amp;amp;amp;amp;gt;Key值唯一,通过一个key值能唯一找到一个vaule值。Map接口的核心方法:public V put(K key,V value) :向Map中添加数据public V get (K key) :根据指定的key取得相应原创 2019-01-20 19:31:27 · 335 阅读 · 0 评论 -
迭代输出(Iterator、ListIterator、Enumeration、for-each)fail-fast
迭代器输出1.迭代输出Iterator----只能从前向后输出----(Collection子类都 支持(List和Set集合))调用Collection集合子类的Iterator方法取得内置的迭代器,使用以下输出格式:public static void main(String[] args) { List&lt;String&gt; list=new ArrayList&lt;&...原创 2019-01-20 09:54:09 · 424 阅读 · 0 评论 -
TreeSet(Comparable和Comparator)和HashSet
TreeSet----底层基于红黑树有序存储不允许元素重复,并且按照元素升序排序,不允许存放null自定义类要想保存到TreeSet中,要么实现Comparable接口,要么向TreeSet传入比较器(Compartor接口)实现了Comparable接口的类可以直接存放在TreeSet或TreeMap中。public int compareTo(T o);返回值三种情况:返回...原创 2019-01-19 23:01:10 · 457 阅读 · 0 评论 -
Java---类集(ArrayList、Vector、LinkedList、HashSet、TreeSet)
一:什么是类集从JDK1.2开始 ,Java提供了动态对象数组,解决了数组长度固定的问题。类集实际上属于动态对象数组。在Java的类集里面(java.util包)提供了两个最为核心的接口:Collection、Map接口。Collection是针对单个对象处理;Map是针对键值对对象处理(key value)。二:Collection接口public interface Collect...原创 2019-01-04 21:32:02 · 339 阅读 · 0 评论 -
Java---序列化与反序列化(ObjectOutputStream/ObjectInputStream)
一:什么是序列化与反序列化序列化:将内存中的对象变为二进制字节流的形式进行传输或保存在文本中;并不是所有对象都要被序列化, 一般对象要进行传输需要被序列化;对象若要被序列化输出,该类需要实现Serializable接口。即只有实现Serializable接口的类才有序列化能力。反序列化:把文本中二进制字节流反序列化为一个对象。import java.io.Serializable;...原创 2018-12-08 21:44:44 · 740 阅读 · 0 评论 -
Lambda表达式
我们知道一个接口中有抽象方法,抽象方法由子类实现,但是抽象方法也可以由lambda表达式实现。Lambda是JDK1.8推出的重要新特性。//抽象方法由子类实现interface IB{ void add(int a,int b ); }class BImpl implements IB{ public void add(int a,int b) { ...原创 2018-11-08 09:40:07 · 688 阅读 · 0 评论 -
JDK新特性------接口定义加强(普通方法:defult和static方法)
为什么会有接口定义加强?因为接口中只有方法声明没有方法体,那么就说明子类需要实现抽象方法,如果有很多子类实现的方法体相同,那么就有很多相同的代码,但是在java中不建议出现相同代码,这时在JDK1.8之后,解决办法是:接口中把相同方法实现。JDK1.8提供了两类新的结构:使用default(此时default不可省,省的默认为public)定义的普通方法,需要通过接口对象来调用;使用st...原创 2018-11-08 08:33:25 · 466 阅读 · 0 评论 -
JDK信新特性-----方法引用(引用类的静态方法、引用对象的普通方法、引用类的普通方法、引用类的构造方法)
方法引用的出现:在JDK1.8以前,引用一般指的是数组引用、类引用和接口引用,但在JDK1.8后,有了方法引用,引用就是别名,方法引用是一个方法是另一个方法的别名。方法引用有四种形式:引用类中静态方法使用格式: 类名称 :: 静态方法名称引用某个对象的方法使用格式: 实例化对象 :: 普通方法引用类中普通方法使用格式:类名称 :: 普通方法注:方法引用一般和函数式接口一起使用...原创 2018-11-11 09:50:17 · 187 阅读 · 0 评论 -
接口(interface /implements/停车场/父接口和父类转化)
什么是接口?接口定义:接口是一个抽象方法与全局常量(static final是全局常量)的集合。为什么要有接口?抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要求并避免单继承局限就需要使用接口。接口可以实现多继承即一个子类可以继承多个接口。接口优先原则:在一个操作中既可以使用抽象类又可以使用接口的时候,优先考虑使用接口。(抽象类必须有is...原创 2018-11-01 09:14:34 · 832 阅读 · 0 评论 -
包装类(Integer/Boolean等、字符串与基本数据类型转化,-127-128自动装箱入池)
为什么要有包装类?Object类可以接收所有引用数据类型。然而在Java中,数据类型分为基本数据类型和引用数据类型,那么基本数据类型如何处理呢?使用包装类 :包装类是将基本数据类型封装到类中,因为Object无法接受基本数据类型,封装成类后就可以用Object类来接收。简单定义一个int的包装类:class IntDemo{ private int num; public...原创 2018-10-30 11:31:27 · 1014 阅读 · 0 评论 -
Object类(覆写toString/equals/接收引用数据类型)
什么是Objetc类?Object是JAVA默认提供的类。在Java中除了Object类,所有的类都有继承关系,默认会继承Object父类,所有类对象都可以通过Object类进行接收,即向上转型。取得对象信息...原创 2018-10-30 09:45:47 · 510 阅读 · 0 评论 -
Java异常(异常体系 、try catch finally 、Exception ) Exception和RuntimeException区别
首先看一下异常的继承体系:所有的异常都是由Throwable继承而来,我们来看他下面的两个子类Error和Exception.Error (栈溢出异常):Error类描述Java运行时内部错误与资源耗尽错误。应用程序不抛出此类异常,这种内部错误(是JVM内部出现错误)一旦出现,除了告知用户并使程序安全终止之外,别无他法。在Exception之下又分为两个分支,RuntimeExceptio...原创 2018-10-31 18:14:55 · 3933 阅读 · 0 评论 -
单例设计模式&&多例设计模式
单例模式单例模式是 :一个类只允许产生一个实例化对象(如太阳类只有一个太阳对象)。如何只产生一个是实例化对象?构造方法私有化: 我们知道是构造函数是实例化对象,要只产生一个实例化对象,就需要把构造方法用private分装起来,那么外部就无法调构造方法。在类里实例化一个私有全局静态对象:既然类外部无法实例化对象,就必须在类里实例化对象,而且对象需要是静态属性,如果不是静态,还得实例化对象取...原创 2018-10-31 15:38:29 · 313 阅读 · 1 评论 -
StringBuffer类、StringBuilder
为什么要有StringBuffer和StringBuilder?任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已,并不能对该字符串常量进行修改,为了方便字符串的修改,有了StringBuffer类。总之,StringBuffer是为了修改字符串。StringBuffer修改字符串public StringBuffer ...原创 2018-10-29 21:22:32 · 116 阅读 · 0 评论 -
String 类(toCharArray/charAt/equalsIgnoreCase/ startWith/indexOf/split/trim/toLowerCase/substring)
字符与字符串的相互转换: 字符数组转化为字符串 用构造函数:public String(char[ ] value) :将字符数组中所有内容变为字符串public String(char[ ] value,int offset,int count);:将字符数组中部分内容变为字符串将字符串转为字符数组public char[ ] toCharArray( );取得字符串中单个字...原创 2018-10-29 20:14:34 · 260 阅读 · 0 评论