- 博客(54)
- 收藏
- 关注
原创 JAVA高级基础(70)---并发编程Executor简介及线程池的创建方式
并发编程--Executor 我们在传统多线程编程创建线程时常常是创建一些 Runnable 对象,然后创建对应的Thread对象执行它们,但是如果程序需要并发执行大量的任务时,需要为每个任务都创建一个Thread,进行管理,这将会影响程序的执行效率,并且创建线程过多将会使系统负载过重。 在Java 5 之后,并发编程引入看一堆新的启动、调度和管理线程的API。Executor框架便是Java...
2018-12-26 16:10:36 240
原创 JAVA高级基础(69)---多线程环境安全使用集合框架API
在当前 jdk 下,即使我们要求集合要保证线程安全,我们也不会在去使用 vector 和 HahsTable Collections synchronizedList(List<T> list) synchronizedMap(Map<K,V> m) synchronizedSet(Set<T> s) package org.lanqiao.syn.d...
2018-12-26 15:29:41 162
原创 JAVA高级基础(68)---定时任务
定时任务 Timer -> TimerTask 注:详细方法请查询API schedule(TimerTask task,Date firstDate,long period) 执行任务 从什么时间开始执行 每次执行的间隔毫秒数 package org.lanqiao.timer.demo; import java.text.ParseException...
2018-12-26 15:21:08 142
原创 JAVA高级基础(67)---线程同步
线程同步 两种方式:使用 同步代码块、同步方法 什么情况下需要同步? 当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步. 如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码. 多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据) A:是...
2018-12-26 15:09:24 113
原创 JAVA高级基础(66)---线程的生命周期
线程的生命周期 线程从创建到运行再到死亡的整个过程。 在线程整个生命周期中,线程总共分为了五中状态: 新建:线程对象创建 就绪:通过线程的start方法启动线程,线程就处于就绪状态,等待线程调度,获取CPU的执行权。 运行:线程获得CPU的执行权,处于运行中。 阻塞:线程在执行期间,因为某种原因(休眠,礼让,时间到达),暂时失去CPU 的执行权,等待再次获得CPU的执行权。 死亡:当...
2018-12-16 10:37:08 222
原创 JAVA高级基础(65)---线程控制方法及获取系统当前线程
线程名称 设置名称:Thread(Runnable target,String name) getName();返回线程名称 getId();获取线程的ID setName(String name);设置线程名称 在创建线程时,系统会默认为每个线程分配一个名称:Thread-0 Thread...
2018-12-16 10:09:51 653
原创 JAVA高级基础(64)---使用匿名内部类实现多线程
package org.lanqiao.thread.demo; /* * 通过匿名内部类来显示多线程 */ public class ThreadDemo { public static void main(String[] args) { new Thread() { @Override public void run() { for(int i ...
2018-12-16 09:56:01 136
原创 JAVA高级基础(63)---创建新的线程
Java程序的运行原理 当使用Java命令启动一个程序的时候,JVM启动。就启动了一个进程。 main方法会执行。main方法的运行就是该进程中的一个线程(主线程)。也会启动GC,GC是后台线程(守护线程)。 package org.lanqiao.thread.demo; public class ThreadDemo { public static void main(String[...
2018-12-15 11:30:40 226
原创 JAVA高级基础(62)---多线程的介绍
多线程 进程:运行中的一个程序,在计算机中的一个运行路径。一个程序只能有一个进程 线程:是进程的一个组成单元。在一个进程中至少有一个或一个以上的线程存在 Java是最先支持多线程开发的语言之一,Java从一开始就支持了多线程能力,因此Java开发者能常遇到上面描述的问题场景。 进程和线程的区别 是否占有资源问题 一个进程的创建/撤销所需要的开销远远大于一个线程所需要的开销 进...
2018-12-15 11:22:22 148
原创 JAVA高级基础(61)---代理模式
代理模式 静态代理 代理的实现完全由程序员自己来实现 改实现只能针对特定的对象来实现代理(就是对被代理对象起到一个增强的作用。) 实现步骤 定义主业务的接口 实现接口 通过代理来增强主业务方法 package org.lanqiao.proxy.demo; //被代理对象 public class Customer implements SallTicket { @Overrid...
2018-12-14 11:37:22 144
原创 JAVA高级基础(60)---动态操作数组
使用反射来操作数组 创建数组 判断是否是数组 获取数组的长度 获取数组的类型 Array是动态创建数组和操作数组的一个类 package org.lanqiao.reflectarray.demo; import java.lang.reflect.Array; public class ReflectArray { public static void main(...
2018-12-14 10:53:01 142
原创 JAVA高级基础(59)---工厂设计模式
工厂设计模式 1.简单工厂 构成 抽象产品类:定义产品的标准和规范 具体产品类:具体实现产品的标准和规范 简单工厂类:根据需求,创建产品对象 优点 将产品对象的创建,不在由我们自己来new 而是由工厂来进行创建 缺点 是工厂和产品之间产生了高度的耦合,工厂的设计不符合类设计的开闭原则:类的扩展性不强 package org.lanqiao.simplefactory.demo;...
2018-12-13 11:14:46 179
原创 JAVA高级基础(58)---简单工厂模式
工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 简单工厂模式又称为静态工厂方法模式。从命名上就可以看出这个模式一定很简单。就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 工厂角色:这是本模式的核心,含有一定的业务逻辑和判断逻辑。在jav...
2018-12-13 10:42:05 172
原创 JAVA高级基础(57)---反射+properties
反射在实际开发中的应用 properties:属性文件 文件中的内容:以键值对的形式存在 键和值都是以字符串的形式存在 clas.properties: username = root password=root className = org.lanqiao.reflect.demo.Student package org...
2018-12-13 10:28:16 279
原创 JAVA高级基础(56)---获取类的私有属性和父类及实现的接口
获取类的信息 获取构造方法 获取public属性 获取public 方法 获取该类的私有的属性和方法:getDeclaredField()/getDeclaredMethod() 获取该类的父类 获取该类实现的接口 package org.lanqiao.reflect.demo; import java.io.Serializa...
2018-12-13 10:20:08 387
原创 JAVA高级基础(55)---通过Class对象获取类的构造方法并创建对象及获取普通方法并执行方法
获取类的信息 从访问权限来分 private public 信息的本质 属性 ...
2018-12-12 17:21:19 1562
原创 JAVA高级基础(54)---获取类的Class对象及类加载器
类的加载 类的加载通过类加载器将一个类加载到内存中并且为每一个类生成一个Class对象 类加载器 负责将class文件加载到内存中,并为之生成对应的class对象。 Class类 Class 是final的、无公共的构造方法,由jvm和类加载来进行构造其对象。 获取Class对象的方式 每个类只有一个唯一的Class对象 通过Class类的静态方法:forName(...
2018-12-12 17:14:37 1396
原创 JAVA高级基础(53)---反射概述
什么是Java的反射? 大家都知道,要让Java程序能够运行,那么就得让Java‘类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类,并且已经被加载了。 Java反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期不知道的类。这样的特点就是反射。 J...
2018-12-12 17:00:29 165
原创 JAVA高级基础(52)---非阻塞式的IO通信
非阻塞式 客户端 获取通道 切换非阻塞模式 分配指定大小的缓冲区 发送数据给服务端 关闭通道 服务端 获取通道 切换非阻塞模式 绑定连接 获取选择器 将通道注册到选择器上, 并且指定“监听接收事件” 轮询式的获取选择器上已经“准备就绪”的事件 获取当前选择器中所有注册的“选择键(已就绪的监听事件)” 获取准备“就绪”的是事件 判断具体是什么事件准备就绪 若“接收就...
2018-12-11 15:56:05 228
原创 JAVA高级基础(51)---有反馈的阻塞式的IO网络通信
package org.lanqiao.blocking2.demo; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.SocketCh...
2018-12-11 15:52:55 112
原创 JAVA高级基础(50)---阻塞式的IO网络通信
网络通信的三要素 IP地址:可以唯一的定位到一台计算机 端口号:可以唯一的定位到一个程序 通信协议:TCP/IP UDP 阻塞式 客户端 获取通道 分配指定大小的缓冲区 读取本地文件,并发送到服务端 关闭通道 服务端 获取通道 绑定连接 获取客户端连接的通道 分配指定大小的缓冲区 接收客户端的数据,并保存到本地 关闭通道 package org.lanqiao...
2018-12-11 15:48:18 119
原创 JAVA高级基础(49)---分散读取和聚集写入
分散读取和聚集写入 read(ByteBuffer[] bufs); //分散读取 write(ByteBuffer[] bufs); //聚集写入 分散读取(Scattering Reads)是指从Channle中读取的数据“分散”到多个Buffer中 注意:按照缓冲区的顺序,从Channle中读取的数据依次将Buffer填满 聚集写入(Gathering Writes)是指将多...
2018-12-11 15:34:39 339
原创 JAVA高级基础(48)---使用通道完成文件数据传输
通道(Channel):传输数据 由 java.nio.channels 包定义的。Channel表示IO源与目标打开的链接。Channel类似于传统的“流”。只不过Channel本身不能直接访问数据,Channel只能与 Buffer 进行交互 IO 改进示意图 DMA(直接存储器访问) Java 为 Channel 接口提供的最主要实现类如下: FileChannel...
2018-12-11 15:27:38 379
原创 JAVA高级基础(47)---直接缓冲区和非直接缓冲区
直接和非直接缓冲区 字节缓冲区要么是直接的,要么是非直接的。如果为直接字节缓冲区,则Java虚拟机会尽最大努力直接在此缓冲区上执行本机I/O操作。也就是说,在每次调用基础操作系统的一个本机I/O操作之前(或之后),虚拟机都会尽量避免将缓冲区的内容复制到中间缓冲区中(或从中间缓冲区中复制内容) 直接字节缓冲区可以通过调用此类的 allocateDirect() 工厂方法来创建。此方法返回的缓冲区...
2018-12-11 10:31:35 192
原创 JAVA高级基础(46)---NIO之Buffer常用方法
常见实现 ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer 缓冲区的使用 建立缓冲区, 分配容量 ByteBuffer buf = ByteBuffer.allocate(capacity); 装载数据:put();及其重载方法 改变缓冲区的读写模式:fli...
2018-12-11 10:04:03 154
原创 JAVA高级基础(45)---缓冲区操作
package org.lanqiao.buffer.demo; import java.nio.ByteBuffer; public class BufferDemo { public static void main(String[] args) { //开辟缓冲区 分配缓冲区 ByteBuffer buf = ByteBuffer.allocate(1024); /...
2018-12-10 15:25:35 268
原创 JAVA高级基础(44)---NIO简介及缓冲区介绍
NIO Java NIO(New IO)是从Java1.4版本开始引入的一个新的IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。 NIO支持面向缓冲区的、基于通道的IO操作。 NIO将以更加高效的方式进行文件的读写操作。 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,...
2018-12-10 15:20:48 223 1
原创 JAVA高级基础(43)---数据流和打印流
数据流 DataInputStream / DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中 打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式 注:更多方法请查找API System.out.print();输出内容不换行 System.out.printl...
2018-12-10 14:49:53 208
原创 JAVA高级基础(42)---对象流
对象流 ObjectInputStream / ObjectOutputStream 要求读写的对象必须进行序列化 ObjectInputStream ObjectOutputStream 序列化的目的 就为了对象的传输。保证传输对象的一致性。 如何序列化 只需要将需要序列化的类实现 Serializable 接口就可以了 可以使用对...
2018-12-10 14:42:16 261
原创 JAVA高级基础(41)---RandomAccessFiled的应用
RandomAccessFile的应用 断点下载 断点续传 复制一个大的文件 package org.lanqiao.randomaccessfile.demo; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; /* * 当下载中断的时候...
2018-12-10 14:23:37 124
原创 JAVA高级基础(40)---RandomAccessFile
RandomAccessFile 随机访问文件。可以通过在创建对象的时候,指定模式:r 读模式 / rw 写模式 在其中存在指针,来定位对文件进行读写的位置 getPointFile(); 获取指针位置 seek(long pos )设置指针位置 在读取文件的时候,我们要注意一问题:是否存在读取一个字符串的方式。在读的时候,要注意转换为字符串的时候的编码方式 readLine(...
2018-12-10 14:19:48 148
原创 JAVA高级基础(39)---重定向流
重定向流 标准输入输出流 1) 标准I/O流就是指System.in、System.out、System.err这三个,分表表示标准输入流、标准输出来、标准错误流; 2) 三者默认的流节点分别是键盘、屏幕、屏幕,这也是我们频繁使用的三个I/O流; 标准流重定向 i. static void ...
2018-12-08 16:42:56 131
原创 JAVA高级基础(38)---合并流
合并流 SequencelnputStream 仅此一个。合并输入流,没有合并输出流 package org.lanqiao.sequen.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java....
2018-12-08 16:33:35 109
原创 JAVA高级基础(37)---字节数组流
字节数组流 将字节数组转换为输入和输出流 ByteArrayInputStream ByteArrayOutputStream size(); 方法返回写入缓冲区中的字节的长度/大小 public void writeTo(Output...
2018-12-08 16:29:51 164
原创 JAVA高级基础(36)---管道流
处理流--->管道流 PipedOutputStream 管道输出流、PipedInputStream 管道输入流(自带缓冲区),配合使用可以实现线程间通信 使用管道实现线程间通信的主要流程如下:建立输出流 out 和输入流 in ,将 out 和 in 绑定,out 中写入的数据则会同步写入到 in 的缓冲区(实际情况是,out 中写入数据就是往 in 的缓冲区写数据,out 中没有数...
2018-12-08 10:59:24 219
原创 JAVA高级基础(35)---字符流的便捷类
FileReader 是 InputStreamReader 的便捷类 FileWriter 是 OutputStreamWriter 的便捷类 其实说白了就是为了少写几个字母 package org.lanqiao.filereader.demo; import java.io.File; import java.io.FileNotFoundExcepti...
2018-12-08 10:45:31 148
原创 JAVA高级基础(34)---装饰设计模式
装饰者设计模式(Decorator) 类A:method(); 类B:继承类A 重写method(); 继承实现代码的扩展的弊端: 增强了两个类的耦合度 受到了Java中单继承的限制。 装饰者设计模式:在不改变原类的情况下,对类的功能进行扩展 装饰设计模式的要求 在装饰类中,必须包含被装饰对象 在扩展功能时,需要在装饰类的构造方法中对被装饰对象进行初始化 在扩展的方法中,需要通过...
2018-12-07 10:20:06 117
原创 JAVA高级基础(33)---字符缓冲流
字符缓冲流 缓冲流:当我们在创建缓冲流的时候,会默认在系统内存中为当前流分配一定大小的缓冲区 字符缓冲输入流 特殊方法:String readLine();每次读取一行 返回值:当前行的内容,不包括终止符(\r、\n、\r\n) 字符缓冲输出流 特殊方法:newLine(); 输出一个行终止符 与操作系统无关 相关代码 package org.lanqiao.bu...
2018-12-07 10:06:19 194
原创 JAVA高级基础(32)---字符流
字符流 字符输入流:Reader 字符输出流:Writer Writer(abstract)--->OutputStreamWriter--->FileWriter OutputStreamWriter (将字节转换为字符流的一个类) 字符输出流需要进行flush 字符流编码 常用的...
2018-12-06 16:46:29 180
原创 JAVA高级基础(31)---字节缓冲流
字节缓冲流 BufferredInputStream bos.flush();//将缓冲区强制刷新 bos.close();//在关闭输出流的时候,首先会执行 flush 将缓冲区的数据刷新清空,然后再关闭流。 注意在使用缓冲输出流的时候,必须进行强制刷新或者close package org.lanqiao.buff.demo; import java.io.Buffered...
2018-12-06 16:37:47 409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人