![](https://img-blog.csdnimg.cn/497330f21c9c4a9b99fbec439b3bbbcd.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
文章平均质量分 78
该专栏会放一些我在学习Java中的一些小总结
最后一只三脚兽
梦想大厂的大三仔
展开
-
线程池的介绍和代码实现
在线程池之前我们应该已经接触了一些"池",如字符串常量池等等,这些“池”的原理其实都差不多,都是为了提高效率提前开辟一块空间存储所需要的东西,需要用直接拿取即可,不需要另外创建,线程池也是一个道理。相比于进程的创建和销毁,线程的创建和销毁已经很快了,但是如果大量线程频繁创建和销毁,这样的开销依旧是很大的,所以我们可以提前创建好一个空间来提前创建好线程,我们直接给这些创建好的线程分配任务即可。但是为什么直接取线程就一定比创建线程来的快呢?原创 2022-09-23 16:41:14 · 229 阅读 · 0 评论 -
多线程定时器的原理与使用,带你从0到1写一个自己的定时器
在实现一个定时器之前我们得先构造出框架,首先我们需要一个MyTimer类作为定时器,在创建一个MyTask类作为任务类。在阻塞队列没有任务时我们必须一直循环,保证第一时间拿到任务,但是当阻塞队列有任务时,我们只要等待最早任务需要的时间即可,在这段时间内可以把CPU资源让出来,能实现这个操作的有wait和sleep。但是如果我们使用了sleep,如果在等待的时间内又有线程传递任务过来,我们就无法接收了,如果用wait其它线程可以用notify操作提前唤醒定时器,这才是我们需要的。原创 2022-09-23 15:26:57 · 210 阅读 · 0 评论 -
Java阻塞队列的原理和使用, 自己写一个阻塞队列
生产者消费者模型就是通过一个容器来解决生产者和消费者之间的耦合问题,通过阻塞队列,生产者和消费不再需要直接进行通信,而是借由阻塞队列完成信息传递。当生产者生产出数据时不必等待消费者相应,直接扔给阻塞队列即可,同时消费者需要获取数据时直接通过阻塞队列获取。阻塞队列是一种特殊的队列,它与普通队列一样遵循“先进先出”的原则。阻塞队列主要的应用场景实在“生产者消费者模型”中。不同的类对应着不同的实现阻塞队列的容器。原创 2022-09-22 17:33:24 · 243 阅读 · 0 评论 -
线程安全问题你了解多少?java中线程安全的基础防范
如上面所说,JVM为了优化速度,每个线程都有一个”工作内存“,t1线程开始时从主内存中获取数据存储在工作内存中,然后在工作内存上操作数据,这就导致了当我们在main线程修改数据后t1线程读取的数据仍然是工作内存中没有修改的数据,所以循环永远不会停止。可见两个操作过后num只加了一次,想要解决这个问题也只要让该操作是原子即可,表现为a在进行increase时b就在一边等着,使得操作变为线性操作,这样就解决了该问题,但与此同时就浪费了大量的时间,在工程中我们需要对锁操作进行平衡,以具体需求为准。原创 2022-09-20 15:47:19 · 203 阅读 · 2 评论 -
Java单例模式的完整实现,从0到1带你一步步优化
饿汉模式的缺陷是instance这个实例对象在类加载阶段就会创立,也就是说程序开始运行时就会创建这个实例对象,这样的模式少了还好,但是如果不加管控就会导致因为需要大量加载数据程序刚开始运行时速度极其缓慢,所以就有了懒汉模式。在很多时候我们创建一个类并不需要很多的实例,只需要一个实例就够了,例如如果我们把太阳作为对象,实现它发光发热的功能,由于太阳只有一个,我们创建一个太阳类后只需要一个对象。设计模式是前人在经验之后总结出来的代码逻辑,或者说是框架,用于更好更快的实现业务需求。原创 2022-09-20 15:36:34 · 201 阅读 · 0 评论 -
哈希表的原理及哈希冲突的解决方法
理想的搜索方法可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。插入元素根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放搜索元素对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。......原创 2022-07-24 20:15:16 · 407 阅读 · 0 评论 -
Java中Map的使用和原理分析
由于TreeMap是有序存储的,这就意味着存入TreeMap的数据必须要进行比较,因此在使用TreeMap存储引用类型时,我们需要放入一个比较器。从中可以发现Set只不过是存储了一个Map成员,并把map的value设置为了Object对象,之后在Map的基础上进行操作的。Map类是接口,不能直接实例化,必须通过实现Map接口的HashMap和TreeMap进行实例化。TreeMap底层是红黑树,操作效率为O(logn),不过TreeMap存储的数据是有序的。...原创 2022-07-24 16:40:27 · 334 阅读 · 0 评论 -
所有常用排序的代码实现和介绍
排序方法最好平均最坏空间复杂度稳定性冒泡排序O(n)O(n^2)O(n^2)O(1)稳定插入排序O(n)O(n^2)O(n^2)O(1)稳定选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定希尔排序O(n)O(n^1.3)O(n^2)O(1)不稳定堆排序O(1)不稳定快速排序O(n^2)不稳定归并排序O(n)稳定。.........原创 2022-07-21 13:40:46 · 165 阅读 · 0 评论 -
Java中Object比较方法equals使用和重写深度刨析
本博客详细解释了equals使用和一些规范,希望对你有所帮助原创 2022-05-27 20:34:51 · 1038 阅读 · 0 评论 -
Java继承与多态详解,你想了解的这里都有
这篇博客是我经过网课和《Java核心技术-卷一》的阅读总结而来,基本总结了所有有关继承和多态的基础和相关注意点,还有一个Object类我会写另一篇博客来描述重写Object类方法的需要注意的点。这篇博客应该是目前为止我花时间最久的一篇博客,如果发现有让你学习的地方还请不吝惜点赞,十分感谢!原创 2022-05-19 12:19:56 · 256 阅读 · 2 评论 -
Java内部类
在Java中,当一个事物的内部需要一个结构,而这个结构又只为这个事物服务的时候,我们就可以使用内部类(例如链表中的节点)。在Java中,可以将一个类定义在一个类或者方法的内部,这种用法我们称之为内部类。原创 2022-05-14 14:15:44 · 102 阅读 · 0 评论 -
Java代码块基础
Java代码块有四种类型:普通代码块(本地代码块)实例代码块(构造代码块)静态代码块同步代码块(在多线程中使用,还未学习,学习以后再补充)普通代码块普通代码块使用较少,就是在方法中用大括号定义的一个代码块class A{ public int x; private int y; public static int z; { int x = 3; System.out.println("普通代码块"+x);原创 2022-05-11 14:50:20 · 127 阅读 · 0 评论 -
5分钟带你从数据类型了解Java相比C/C++有什么优势
数据类型是一门语言的血肉,通过这5分钟的浏览,只学过C/C++的小伙伴会初步了解Java的一些特性,学过一点Java的朋友在读完这篇文章后也一定会对Java的语法规范有更深刻的了解原创 2022-04-20 10:20:55 · 856 阅读 · 2 评论