![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 65
ethannotlazy
这个作者很懒,什么都没留下…
展开
-
Java ThreadLocal 源码解析
使用 ThreadLocal 时,可以将数据存储在一个特殊的对象中,这个对象会被自动关联到当前线程。如果想要在创建 ThreadLocal 对象时就设置初始值,可以使用如果想要删除 ThreadLocal 中的值,可以调用remove()方法。ThreadLocalMap 的创建是懒加载的;ThreadLocal 的实现是通过将一个 ThreadLocalMap 作为 Thread 对象的成员实现的;每个线程的全部 ThreadLocal 都保存在 ThreadLocalMap 中。原创 2023-12-28 23:33:27 · 551 阅读 · 0 评论 -
1115. 交替打印FooBar
题目描述我们提供一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } }}两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另原创 2021-04-30 23:40:42 · 300 阅读 · 1 评论 -
HashMap源码浅析
HashMap简介HashMap继承了AbstractMap,实现了Map, Cloneable, Serializable接口:HashMap的一些参数HashMap的默认起始大小为16,最大容量为2^30: /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // ak原创 2021-04-03 12:04:19 · 86 阅读 · 0 评论 -
Executor源码浅析
Executor该类用来执行提交的任务,对任务提交和任务执行之间进行解耦,任务执行的细节包括线程的使用、调度等。通常使用Executor而不是明确地创建线程。Executor的源码如下:public interface Executor { /** * 在未来一定时间内执行给出的命令,这个命令可能在新线程、线程池的线程、调用线程执行,这取决于Executor的实现。 ...原创 2020-05-05 21:58:13 · 335 阅读 · 0 评论 -
利用Callable和Future类创建线程
Callable该接口包含一个函数call,实现该方法来定义一个任务,这个任务具有返回值T,且可以抛出异常。Callable的源码如下:@FunctionalInterfacepublic interface Callable<V> { V call() throws Exception;}Future一个Future对象代表一个异步计算的结果,该类提供了方法用...原创 2020-05-03 23:13:55 · 475 阅读 · 0 评论 -
java注解
常用java注解@Override@Deprecated@SuppressWarningsSuppressWarnings可以让编译器不提示警告:@SuppressWarnings(value="all")public class Worker {}利用注解写javadocpackage com.ethan.annotation;/** * 注解javadoc演示 ...原创 2020-01-22 22:37:24 · 80 阅读 · 0 评论 -
java反射
反射:框架设计的灵魂* 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码* 反射:将类的各个组成部分封装为其他对象,这就是反射机制 * 好处: 1. 可以在程序运行过程中,操作这些对象。 2. 可以解耦,提高程序的可扩展性。* 获取Class对象的方式: 1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 * 多用于配置文...原创 2020-01-22 16:44:15 · 135 阅读 · 0 评论 -
Junit单元测试
Junit单元测试:* 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。 2. 白盒测试:需要写代码的。关注程序具体的执行流程。* Junit使用:白盒测试 * 步骤: 1. 定义一个测试类(测试用例) * 建议: * 测试类名:被测试的类名Test CalculatorTest * 包名:xxx.xxx.xx.test c...原创 2020-01-22 16:38:52 · 524 阅读 · 0 评论 -
方法引用
双冒号:: 为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。语义分析例如上例中, System.out 对象中有一个重载的println(String) 方法恰好就是我们所需要的。那么对于printString 方法的函数式接口参数,对比下面两种写法,完全等效:Lambda...原创 2020-01-21 16:36:07 · 152 阅读 · 0 评论 -
Stream流
Stream(流)是一个来自数据源的元素队列元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组 等。和以前的Collection操作不同, Stream操作还有两个基础的特征:Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluentstyle)。 这样做...原创 2020-01-21 13:09:44 · 119 阅读 · 0 评论 -
常用函数式接口
Lambda表达式回顾Lambda表达式,当接口或抽象类只有一个抽象方法时可以使用Lambda表达式精简语句。线程的创建:public class Demo01Runnable { public static void startThread(Runnable run) { new Thread(run).start(); } public stat...原创 2020-01-17 20:24:00 · 377 阅读 · 0 评论 -
浏览器的TCP连接
这时客户端就是浏览器访问服务器:服务器读取客户端的请求信息:服务器要给客户端回写一个信息,回写一个html页面(文件),我们需要读取index.html文件,就必须知道这个文件的地址,而这个地址就是请求信息的第一行。可以使用BufferedReader中的方法readLine()读取一行。用String类的方法split(" ")获取中间部分。服务器创建一个本地的字节输入流,根据获取...原创 2020-01-17 15:58:16 · 3284 阅读 · 0 评论 -
使用Socket类进行TCP通信
客户端Socket类TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据表示客户端的类:java.net.Socket:此类实现客户端套接字。构造方法:Socket(String host, int port)创建一个流套接字并将并将其连接到指定主机上的指定端口号。参数:String host:服务器主机的名称/服务器的IP地址int port:服务器...原创 2020-01-17 01:08:45 · 528 阅读 · 0 评论 -
Java之IO流(三)
编码方式FileReader可以读取IDE默认编码格式(UTF-8,三个字节一个中文)的文件FileReader读取系统默认编码(中文GBK,两个字节一个中文)会产生乱码可以用OutputStreamWriter和InputStreamReader实现编码格式的转换:OutputStreamWriter osw = new OutputStreamReader(FileOutputSt...原创 2019-12-23 11:05:26 · 153 阅读 · 0 评论 -
Java之IO流(二)
BufferedOutputStream类java.io.BufferedOutputStream extends OutputStream构造方法:BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流BufferedOutputStream(OutputStream out, int size)创建一个新的缓...原创 2019-12-22 23:28:04 · 148 阅读 · 0 评论 -
Java之IO流(一)
输出流OutputStreamjava.io.OutputStream:字节输出流此抽象类表示输出字节流的所有类的超类定义的方法:public void close():关闭此输出流并释放与此流相关联的任何系统资源public void flush():刷新输出流并强制任何缓冲的输出字节被写出public void write(byte[] b):将b.length字节从指定的字节数...原创 2019-12-22 16:34:25 · 98 阅读 · 0 评论 -
Java之File类总结
分隔符路径分隔符:1.windows:’;’ 2.linux:’:’名称分隔符:1.windows:’’ 2.linux:’/’public class Demo01Separator { public static void main(String[] args) { /* static String pathSeparator 路径分隔符,wi...原创 2019-12-21 23:51:33 · 157 阅读 · 0 评论 -
Java之Lambda表达式总结
常规方法常规方法:先实现一个接口,声明一个该实现类的对象,再将该对象传递给函数。改进方法:用匿名内部类的方式实现接口,再声明该接口的匿名对象传递给函数。两种方法实现如下所示:public class Demo01Runnable { public static void main(String[] args) { //常规方法 Runnable r ...原创 2019-12-21 16:00:27 · 239 阅读 · 0 评论 -
Java线程同步和互斥基础
wait()和notify()void wait()在其他线程调用此对象的notify()方法或notifyAll()方法前,当前进程等待void notify()唤醒此对象监视器上等待的单个线程,使其继续执行wait()之后的代码以下例子中,假设生产者一次只能服务一个消费者,则生产者和消费者的关系为:同步、互斥。需要用synchronized()控制两者只有其一在执行用wait(...原创 2019-12-21 14:57:27 · 480 阅读 · 0 评论 -
Java线程同步
线程的安全问题多个线程对临界区的同时访问会造成线程的安全问题,如下例子模拟售票:public class RunnableImpl implements Runnable { private int ticket = 10; @Override public void run() { while(true){ if(ticket ...原创 2019-12-21 00:10:14 · 78 阅读 · 0 评论 -
Java线程的创建和执行
线程的创建之Thread类创建多线程的第一种方式:创建Thread类的子类java.lang.Thread类是描述线程的类,我们要实现多线程程序,必须继承Thread类实现步骤:1.创建一个Thread类的子类2.在Thread类中的子类中重写Thread类中的run方法,设置线程任务3.创建Thread类的子类对象4.调用Thread类中的start方法,开启新的线程,执行run方...原创 2019-12-20 22:37:30 · 176 阅读 · 0 评论 -
Java异常知识点总结
异常概览异常分为Exception和Error,Exception可以通过try-catch块处理,而Error是指程序发生错误,必须修改,如内存溢出public class ErrorAndException { public static void main(String[] args) { int[] ar1 = new int[3]; try{...原创 2019-12-20 16:11:21 · 155 阅读 · 0 评论 -
Java泛型
泛型的使用定义有一个泛型接口:public interface GenericInterface <E>{ public E method1(); public void method2(E e);}实现该接口的方法如下:public class GenericInterfaceImpl implements GenericInterface<Inte...原创 2019-12-20 00:15:34 · 168 阅读 · 0 评论 -
Java内部类知识点总结
内部类方法调用有如下类:public class Body { private String name; public class Heart{ public void beat(){ System.out.println("heart beats"); } } public void bodyMet...原创 2019-12-19 17:27:21 · 166 阅读 · 0 评论 -
Java接口知识点总结
接口的成员成员变量:常量public static final int PI = 3.14159;注意:常量必须进行赋值抽象方法public abstract void method(int i);默认方法public default int method(int i){ //do something}静态方法public static int meth...原创 2019-12-19 13:45:02 · 167 阅读 · 0 评论 -
Intellij IDEA常用技巧
快捷键执行 shift + F10提示补全 ctrl + shift + space单行注释 ctrl + /多行注释 ctrl + shift + /向下复制一行 ctrl + D删除一行 ctrl + Y向下移动行 ctrl + shift + up/ down向下开始新的一行 shift + enter向上开始新的一行 ctrl + alt + enter...原创 2019-12-18 23:22:00 · 186 阅读 · 0 评论 -
Object类的equals方法和hashcode方法简析
equals方法在Object类中,这个方法将判断两个对象是否具有相同的引用。然而在实际定义的类中,这种判断的意义不大,而是要检测两个对象的某个域是否相等。例如,对于两个字符串,如果它们的各个字符都相同,则判断它们是相等的。 public static void main(String[] args){ String s1 = new String("abc"); ...原创 2019-12-11 17:12:04 · 255 阅读 · 0 评论