Java基础学习
忧郁的小菜鸡
这个作者很懒,什么都没留下…
展开
-
java 的 Stream 流
参考代码:user对象代码:package common;public class User { private String name; private Integer age; private String address; public User(String name, Integer age, String address) { super(); this.name = name; this.age = age; this.address = address;原创 2020-12-15 13:47:31 · 160 阅读 · 0 评论 -
Java 网络编程——笔记一
java 只支持 TCP 、 UDP 、以及建立再 TCP和 UDP 之上的应用层协议,若需要使用其它协议,只能通过链接到原生代码来实现当 Java 程序需要访问网络时,他们需要同时处理数字地址和相应的主机名。这些方法由 Java.net.InetAddress 类提供每台有 ip 地址的计算机都有几千个逻辑端口,确切地讲,每个传输层协议有 65535 个端口(我原来一直以为是整个计算机共享 65535 个端口,)...翻译 2020-11-02 13:44:14 · 180 阅读 · 1 评论 -
NIO——transferFrom/transferTo与MappedByteBuffer问题/实验
一、实验(这个实验在 CSDN和开源中国上我都描述了具体流程)实验准备: 需要进行文件复制的文件, 我的文件大小是 1.12 G实验代码: @Test public void test_4() throws Exception{ File file = new File("F:\\temporary\\readFile\\测试文件.rar"); File file2 = new File("F:\\temporary\\writeFile\\测试文件.rar原创 2020-09-05 16:33:19 · 1462 阅读 · 7 评论 -
NIO——笔记四
通道(Channel)多数情况下,通道与操作系统的文件描述符 和 文件句柄有着一对一的关系。虽然通道比文件描述符更广义,但你经常使用到的多数通道都是连接到开放的文件描述符的。Channel 类提供维持平台独立性所需要的抽象过程,不过仍然会模拟现代操作系统本身的 I/O 性能。通道是一种途径,借助该途径,可以用最小的总开销来访问操作系统本身的 I/O 服务。缓冲区则是通道内部用来发送和接收数据的端点。与缓冲区不同,通道 API 主要由接口指定。不同的操作系统上通道实现会有根本性差异,所以通道 API翻译 2020-08-29 16:21:04 · 106 阅读 · 0 评论 -
NIO——笔记三
一、复制缓冲区可以创建从外部存储到数组中元素的缓冲对象,缓冲区不限于管理数组中的外部数据,它们页能管理其它缓冲区中的外部数据,当一个管理其他缓冲器所包含的数据元素的缓冲器被创建时,这个缓冲器被称之为视图缓冲器。大多数的视图缓冲器都是 ByteBuffer 的视图。视图存储器总是通过调用已存在的存储器实例中的函数来创建。使用已存在的存储器实例中的工厂方法意味着视图对象为原始存储器的内部实现细节私有。数据元素可以直接存取,无论它们是存储在数组中还是以一些其他的方式,而不需经过原始缓冲区对象的 get()/p翻译 2020-08-09 15:01:04 · 212 阅读 · 0 评论 -
NIO——笔记二(缓冲区)
缓冲区(Buffer)一个 Buffer 对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。非字节缓冲区可以在后台执行从字节或到字节的转换,这取决于缓冲区是如何创建的(这暗含了按字节排序的问题)。缓冲区的工作与通道紧密联系。通道是 I/O 传输发生时的入口,而缓冲区是这些数据传输的来源或目标。对于离开缓冲区的传输,你想要传递出去的数据被置于一个翻译 2020-08-01 08:41:40 · 260 阅读 · 0 评论 -
NIO——笔记一(相关概念以及代码)
@Testpublic void NIOTest_copy_1() throws Exception {long startTime = System.currentTimeMillis();FileChannel in = new FileInputStream(“F:\temporary\read.txt”).getChannel();FileChannel out = new FileOutputStream(“F:\temporary\write.txt”).getChannel(); B原创 2020-07-30 20:32:46 · 144 阅读 · 0 评论 -
NIO——FileDescriptor
FileDescriptor 类该类的作用?它用作特定结构的不透明句柄,这些结构表示打开的文件、打开的套接字或其它字节源宿。它实际用途是创建一个 FileInputStream 或 FileOutputStream,应用程序不应该创建自己的文件描述符在哪里被用到了?MappedByteBuffer 中被用到, DirectByteBuffer 中又继承了 MappedByteBuffer, DirectByteBuffer 又是 NIO 的一个重要类,所以看看还是对我们理解底层有所帮助的输出原创 2020-07-21 21:01:20 · 170 阅读 · 0 评论 -
Semaphore 的简单使用
Semaphore 的使用,看了 api 后,我觉得就一个值得注意的,那就是:信号量通常用于限制线程数,而不是访问某些(物理或逻辑)资源使用示例代码如下: @Test public void SemaphoreTest() throws Exception { CountDownLatch countDownLatch = new CountDownLatch(10); // 3 个工作人员 Semaphore semaphore = new Semaphore(3, true原创 2020-07-16 08:37:12 · 240 阅读 · 0 评论 -
同步、管程、重排序
本文来源于文档,但位置丢失,所以发布时只能选择原创无法选择为转载和翻译,这里附上官方地址: JSR内存模型和线程规范 一、 关于同步和管程有多种机制可以用于线程间的通信。其中最基础的是同步,而同步是用管程来实现的。每个对象都关联着一个管程,线程可以通过它来执行锁定(lock) 或解锁(unlock)操作。每次仅有一个线程可以持有管程上的锁。其它试图锁定该管程的线程会一直阻塞,直到能从该管程上获得锁为止。线程 t 可以锁定一个管程多次,每次unlock操作都会将一次lock操作撤销。synchroniz原创 2020-07-15 11:42:37 · 110 阅读 · 0 评论 -
ReentrantReadWriteLock——总结(读写锁的实现)
ReentrantReadWriteLock类的大体结构在看完 ReentrantReadWriteLock 的源码后,发现主要还是通过它的内部类 Sync(当然咯,还有其它的内部类) 实现的,而 Sync 又继承了 AbstractQueuedSynchronizer 类;同时还通过 ThreadLocalHoldCounter(此类继承了ThreadLocal)来记录HoldCounter 对象。所以,在阅读源码时,建议最好掌握以下知识点,不然可能会有点儿懵:知识AQS 的实现原创 2020-07-15 09:37:25 · 170 阅读 · 0 评论 -
ReentrantReadWriteLock 源码查看
ReentrantReadWriteLock 源码查看一、类的注释说明/** * An implementation of {@link ReadWriteLock} supporting similar * semantics to {@link ReentrantLock}. * <p>This class has the following properties: * / /** * ReadWriteLock 的支持与实现与 ReentrantLock 语义类似,此类具有原创 2020-07-14 17:26:26 · 100 阅读 · 0 评论 -
多线程——ReentrantLock
一、初识 ReentrantLockReentrantLock 这个是大佬 Doug Lea 写的,在早期的 java 版本中,synchronized 效率低,原因是线程的阻塞和唤醒,操作系统需要在用户态和内核态切换,线程阻塞和唤醒的代价比较高。然后大佬就看不下去了,自己写(不仅是ReentrantLock哈)。当然咯,synchronized 毕竟是亲儿子,随着时间的推移,不断对其进行优化,性能方面 synchronized 已经有了很大提升了。首先 ReentrantLock 在 java 中是一原创 2020-07-12 16:04:38 · 233 阅读 · 0 评论 -
多线程——LockSupport
一、初步认识LockSupport 是一个灵活的线程工具类,主要是为了阻塞和唤醒线程用的,查看 API 或 源码可知,它的所有方法都是静态方法 // 阻塞当前线程 / 禁止当前线程调度,除非许可证可用 public static void park(Object blocker) // 暂停当前线程,有超时时间 / 禁用当前线程进行线程调度,直到指定的等待时间,除非许可证可用 public static void parkNanos(Object blocker, long nanos) //原创 2020-07-11 15:44:13 · 165 阅读 · 0 评论 -
多线程——AQS总结
AQS 总结AQS 是什么?AQS 是 AbstractQueuedSynchronizer 的简称,也被称为抽象给队列同步器,它是一个抽象类。它提供了一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关的同步器(信号量、事件等),这个类被设计为大多数类型的同步器的有用依据。AQS 的数据结构什么?AQS 的实现是基于FIFO队列的,它是一个双向队列AQS 内部类有哪些?AQS 的内部类主要是 Node 和 ConditionObjectAQS 的状态属性:原创 2020-07-10 11:32:00 · 256 阅读 · 0 评论 -
AQS源码查看
这个类是非常重要的,它被用于很多地方一、类说明(这个类是什么?主要目的是什么?)/* * Provides a framework for implementing blocking locks and related * synchronizers (semaphores, events, etc) that rely on * first-in-first-out (FIFO) wait queues. This class is designed to * be a useful bas原创 2020-07-09 09:26:34 · 258 阅读 · 0 评论 -
CAS以及缓存伪共享
一、缓存在计算机中的结构和大小在正式开始之前,我们得无比先了解缓存在计算机中的结构和大小如何:首先查看我们自己电脑的缓存; windows 下,Ctrl + alt + .(点), 打开任务管理器,性能栏底部:...原创 2020-06-20 11:48:51 · 294 阅读 · 0 评论 -
多线程——Thread(包括sleep是否会占用CPU资源验证)
一、使用原创 2020-06-18 11:16:45 · 8273 阅读 · 2 评论 -
常见的位运算
位运算按位与(&)两位全是1,结果才为1:如:0&0=0; 0&1=0; 1&1=1;按位或(|)只要有一个为1,结果就是1:如:0|0=0; 0|1=1; 1|1=1;亦或运算(^)两个相应位为‘异’(值不同),则该位为1,否则为0如:0^0=0; 0^1=1;1^0=1; 1^1=0;取反运算(~)对于一个二进制数按位取反,即将...原创 2020-06-16 13:46:24 · 199 阅读 · 0 评论 -
线程池——ThreadPoolExecutor
一、创建方法 ExecutorService executor = new ThreadPoolExecutor(3,3,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(100));参数说明:第一个参数:核心线程的数量第二个参数:最大线程的数量第三个参数:存活时间第四个参数:时间单位第五个参数:工作队列这里需要提及一下,在使用 Executors 创建线程池的时原创 2020-06-16 11:55:31 · 321 阅读 · 0 评论 -
maven聚合项目打包
1.在resource资源文件中添加一个 descriptor.xml,里面内容为:<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/p原创 2020-05-20 16:46:21 · 809 阅读 · 0 评论 -
maven引入本地jar包并打包——以jna.jar和examples.jar为例
之前引入jar包,在本机运行,一直都没问题,然后我就使用mave打包项目,发现有个包却找不到了。如下图:可以看到 jar 包是有了的(这两个jar包是本地引入的),但打包却没有进来。解决:如图:效果:最后附上 jna.jar 和 examples.jar的地址:链接:https://pan.baidu.com/s/10UQCZnlOjEpiscMMh7HLNg提取码:m07h复制这段内容后打开百度网盘手机App,操作更方便哦...原创 2020-05-19 15:18:11 · 8396 阅读 · 10 评论 -
idea获取 resource 下文件路径
Java关于“/”和“\”这两货第一次给人的感觉真是一模一样,但其实还是有不同的:首先就是用得最多的 “//”,单行注释然后就是 “/”, 可以用在文件路径上,它在路径中就相当于 “\\”,要小心使用;使用案例如图:在 Linux 操作系统中,“/”也经常被我们用于进入目录,如图(进入根目录下的 dev 目录 ):其次就是 “\”,在我们常用的windows操作系统中表示...原创 2020-04-29 15:50:00 · 8129 阅读 · 0 评论 -
maven导包
maven 导包问题以往我们导包,直接这样就可以了,因为maven会帮我们进行管理: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> ...原创 2020-04-27 11:19:07 · 489 阅读 · 0 评论 -
Ajax 传数组对象(始终映射不进后端对象中)
一、用法前端:代码 $.ajax({ type:"post", url:"${pageContext.request.contextPath}/xxx", data:JSON.stringify(array), dataType:'JSON', contentType:"a...原创 2020-04-26 11:35:48 · 613 阅读 · 0 评论 -
反射(入门)
反射package entity;public class User { private int id; private int age; private String name; public User() { super(); } public User(int id, int age, String name) { super(); this.id ...转载 2020-04-26 10:24:53 · 114 阅读 · 0 评论 -
进制转化
进制转换一、字符类型转成二进制 //将字符转化成二进制 public static String strToBinary(String str){ char[] strChar=str.toCharArray(); String result=""; for(int i=0;i<strChar.length;i++){ ...原创 2020-03-09 16:01:17 · 723 阅读 · 0 评论 -
synchronized 关键字反编译后的一点东西
今天闲来无事,反编译了syschronized关键字的代码,第一份Java代码如下:public class SynchronizedDemo { public static void main(String[] args) { synchronized (SynchronizedDemo.class) { } m(); } public static void m(){ ...原创 2019-12-05 18:34:42 · 547 阅读 · 1 评论 -
Java 基础—— ThreadLocal
ThreadLocal 如何实现为每个线程提供一个独立的变量副本一、核心当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本二、具体实现(源码)当我们获取需要的元素时,通过的它的 get() 方法,那么就以这里为起点开始分析吧,源码如下 /** * Returns the value in the current thread's copy...原创 2019-11-17 20:27:26 · 113 阅读 · 0 评论 -
Java 基础 —— JDBC
Java JDBC的简单使用一.思路Ⅰ.单体上看:① 导入相关 jar 包② 加载 数据库驱动③ 获取数据库连接④ 执行数据库相关操作⑤ 关闭数据库连接Ⅱ.从整体上看① Service 层获取数据库连接,负责整体的逻辑处理② Dao 层负责将数据库数据处理、封装或转换成Service 层需要的数据③ Util 层,提供数据库连接、查询、关闭等操作个人观点:在不考虑使用数据库...原创 2019-11-17 16:40:45 · 142 阅读 · 0 评论 -
多线程 CyclicBarrier
1.简单使用public class CyclicBarrierTest implements Runnable{ CyclicBarrier cyclicBarrier; public CyclicBarrierTest(CyclicBarrier cyclicBarrier ) { this.cyclicBarrier = cyclicBarrier; } @Override...转载 2019-10-23 09:39:57 · 117 阅读 · 0 评论 -
多线程CountDownLatch
1.简单的使用import java.util.concurrent.CountDownLatch;public class CountdownLatchTest implements Runnable{ CountDownLatch countDownLatch; public CountdownLatchTest(CountDownLatch countDownLatch) { ...原创 2019-10-22 16:27:09 · 131 阅读 · 0 评论 -
进程与线程的区别(全文来自:https://www.jianshu.com/p/2dc01727be45)
一、进程与线程的区别:1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、线程之间的通信更方便,同一...转载 2019-10-20 17:01:18 · 156 阅读 · 0 评论 -
Java学习 ——String
Java学习 ——StringString 学习小结(可能有些描述不是特别到位)1.String 由final关键词修饰,这意味着,在第一次赋值后,值是不可以被改变的2.String 的hash Code 是 int 类型,这意味着它的默认值是 03.serialVersionUID的作用:用于验证版本号的一致性,在经行反序列化时,会对 serialVersionUID 进行判断,若...原创 2019-08-19 11:54:07 · 328 阅读 · 0 评论