
Java
Ingsuifon
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java Servlet
Java Servelt是什么 Servelt引言 Servlet是一个 JAVA 程序,专门在 Web 服务器上的 JVM 内运行。它通常用于制作/创建动态 Web 应用程序和网页。 它是一种用于开发动态 Web 应用程序的技术。它使用JAVA语言来开发网页。这项技术是安全、可扩展和强大的,因为它使用的JAVA技术就有这些特点。 理解 它是一个小程序,在 JAVA 语言上使用和运行,可以扩展服务器的功能。它们用于开发静态和动态 Web 应用程序。 Servlet API’s Javax.ser原创 2021-10-07 09:52:11 · 153 阅读 · 0 评论 -
HashMap源码阅读记录
MIN_TREEIFY_CAPACITY:最小允许树化的哈希表容量。也就是说,如果哈希表的容量没有达到这个最小值,而桶里已经有很多节点了,不会把链表转成红黑树,而是先扩容,因为扩容会进行再散列,原先在一个桶里的节点可能会被散列到不同的桶中。 ...原创 2021-05-27 00:01:44 · 189 阅读 · 0 评论 -
Java 中关于 try、catch、finally 中的细节分析
看了一位博友的一篇文章,讲解的是关于java中关于try、catch、finally中一些问题 下面看一个例子(例1),来讲解java里面中try、catch、finally的处理流程 public class TryCatchFinally { @SuppressWarnings("finally") public static final String test() { ...转载 2020-02-24 11:53:25 · 206 阅读 · 0 评论 -
类加载与类初始化
很多人会把这两个概念混淆。我们先来看看这两者的概念。 类加载 JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成 JVM可以直接使用的Java类型的过程。 \quad·加载 \quad\quad将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。 ...原创 2020-02-22 21:43:51 · 584 阅读 · 0 评论 -
UDP简单案例_双人聊天
UDP传输协议: \quad一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 特点: · 非面向连接,传输不可靠,可能丢失 · 发送不管对方是否准备好,接收方收到也不确认 · 可以广播发送 · 非常简单的协议,开销小 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStrea...原创 2020-02-12 17:55:30 · 345 阅读 · 0 评论 -
可重入锁
\quad锁作为并发共享数据保证一致性的工具,大多数内置锁是可重入的,也就是说,如果某个线程试图获取一个已经由它持有的对象的锁时,这个请求会立刻成功,并且会将这个锁的计数器加1,而当线程退出同步块时,计数器会减1,当计数器的值为0时,锁会被释放。如果没有可重入锁的支持,在第二次企图获得锁时将会进入死锁状态。如以下例子: //第一次获得锁,this对象被锁定 synchronized (this) ...原创 2020-02-11 13:52:36 · 158 阅读 · 0 评论 -
线程局部变量类ThreadLocal
· 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其它线程。 · ThreadLocal可以放一个线程级别的变量,其本身能够被多个线程共享使用,并且又能够达到线程安全的目的。说白了,ThreadLocal就是想在多线程环境下去保证成员变量的安全。常用的方法有get/set/initialValue方法。 · JDK建议T...原创 2020-02-11 10:50:15 · 212 阅读 · 0 评论 -
Volatile
volatile volatile\color{red}{volatile}volatile保证线程间变量的可见性,简单来说就是当线程A对变量x进行了修改后,在线程A后面执行的其它线程能看到变量x的变动,更详细地说就是要符合以下两个规则: ▪ 线程对变量进行修改之后,要立刻写回主内存 ▪ 线程对变量读取的时候,要从主内存中读取,而不是工作内存 各线程的工作内存间彼此独立、互不可见,在线程启动的时...原创 2020-02-10 17:39:40 · 166 阅读 · 0 评论 -
HappenBefore指令重排
HappenBefore ·你写的代码很可能根本没按你期望的顺序执行,因为编译器和CPU会尝试重排指令使得代码更快地运行。 ·在虚拟机层面,为了尽可能减少内存操作速度远慢于CPU运行速度所带来的CPU空置的影响,虚拟机会按照自己的一些规则将程序编写顺序打乱——即写在后面的代码在时间顺序上可能会先执行,而写在前面的代码会后执行——以尽可能充分地利用CPU。 ·在硬件层面,CPU会将接受到的一批指令按...原创 2020-02-10 16:09:08 · 281 阅读 · 0 评论 -
线程并发协作(生产者/消费者模式)
\quad多线程环境下,我们经常需要多个线程的并发和协作。这个时候,就需要了解一个重要的多线程并发协作模型“生产者/消费者模式”。 \quad生产者指的是负责生产数据的模块(这里模块可能是:方法、对象、线程、进程)。 \quad消费者指的是负责处理数据的模块(这里模块可能是:方法、对象、线程、进程)。 \quad消费者不能直接使用生产者的数据,它们之间有个“缓冲区”。生产者将生产好的数据放入“缓冲...原创 2020-02-10 10:49:03 · 352 阅读 · 0 评论 -
死锁及解决方法
死锁的概念 \quad“死锁”指的是: \quad多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 \quad因此, 某一个同步块需要同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。下面案例中,“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么,实际运行时,“玉子的化妆线程”拥有了“...原创 2020-02-09 17:55:35 · 177 阅读 · 0 评论 -
实现线程同步
\quad由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问造成的这种问题。 \quad由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized 方法...原创 2020-02-09 13:14:11 · 198 阅读 · 0 评论 -
多线程_插队join
·join合并线程,待此线程执行完成后,再执行其它线程,其它线程阻塞\color{red}{其它线程阻塞}其它线程阻塞 应理解为插队,后面的车要等插进来的车走才能走。 public class BlockedJoin { public static void main(String[] args) { System.out.println("爸爸和儿子买烟的故事"); ...原创 2020-02-08 11:20:23 · 192 阅读 · 0 评论 -
Lambda表达式
Lambda表达式: •避免匿名内部类定义过多 •其实质属于函数式编程的概念 下面一步步简化线程类。 /** * 最初的外部类版本 */ public class LambdaThread implements Runnable { @Override public void run() { for (int i = 0; i < 20; i++) { ...原创 2020-02-07 21:45:29 · 182 阅读 · 0 评论 -
初涉静态代理设计模式
\quad我们知道,有三种方法实现多线程,第一种是继承Thread类,第二种是实现Runnable接口,前者通过start()方法开启线程,然后后者没有start()方法,必须借助Thread来代理它才能使用start(),这就是静态代理。 \quad在静态代理中,我们要有真实角色和代理角色,这两者都需要实现同一接口 /** * 静态代理 * 1、真实角色 * 2、代理角色 */ publ...原创 2020-02-07 17:00:03 · 154 阅读 · 0 评论 -
数据流与对象流
数据流 \quad数据流将“基本数据类型与字符串类型”作为数据源,从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型。 \quadDataInputStream和DataOutputStream提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法。 \quadDataInputStream和DataOutputStr...原创 2020-02-06 22:17:54 · 426 阅读 · 0 评论 -
关于转换流的一点理解
先看如下代码: public class ConvertTest { public static void main(String[] args) { byte[] a = new byte[8]; try { System.in.read(a); System.out.write(a); } ...原创 2020-02-05 16:48:37 · 224 阅读 · 0 评论 -
IO流对接的封装
import java.io.*; /** * 1、封装拷贝 * 2、封装释放资源 */ public class FileUtils { public static void main(String[] args) { //从文件到文件 try { InputStream is = new FileInputStream("...原创 2020-02-04 22:49:59 · 374 阅读 · 0 评论 -
使用对接字节数组流进行文件复制
·InputStream \quad此抽象类是表示字节输入流的所有类的父类。InputSteam是一个抽象类,它不可以实例化。 数据的读取需要由它的子类来实现。根据节点的不同,它派生了不同的节点流子类,常用的如FileInputStream,ByteArrayInputStream等。 \quad 继承自InputSteam的流都是用于向程序中输入数据,且数据的单位为字节(8 bit)。 ·Out...原创 2020-02-04 21:33:50 · 266 阅读 · 0 评论