![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 54
HelloGeekCsdn
攻城攻城还需要一个师。
混迹互联网多年,有一点心得,有一点体会。
展开
-
小知识点 yield、join、sleep和wait
yield()方法使用示例在下面的示例程序中,我随意的创建了名为生产者和消费者的两个线程。生产者设定为最小优先级,消费者设定为最高优先级。在Thread.yield()注释和非注释的情况下我将分别运行该程序。没有调用yield()方法时,虽然输出有时改变,但是通常消费者行先打印出来,然后事生产者。join()方法线程实例的方法join()方法可以使得一个线程在另一个线程结束后再执行。如果join()方法在一个线程实例上调用,当前运行着的线程将阻塞直到这个线程实例完成了执行slee..原创 2021-02-08 14:14:42 · 210 阅读 · 0 评论 -
Java中锁的思考
Synchronized 重入锁 各种锁 是什么 优缺点 使用什么场景 常用方法 如何减少使用锁同步功能CountDownLatchURL:http://www.cnblogs.com/skywang12345/p/3533887.html是什么?CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行原理:CountDownL...原创 2020-09-28 09:38:16 · 91 阅读 · 0 评论 -
负载均衡策略&&全局ID生成&&一致性hash
轮询 最少连接 IP地址哈希 基于权重的负责均衡,平均权重*一个随机值(0~1之间的小数)与调用接口权重作比较。 UUID ID生成表模式 Snowflake 结合缓存方案,采用ID生成表方式批量获取ID,如1000个放到本地缓存中 优:性能好;缺:不连贯 一致性Hash...原创 2020-08-31 10:25:02 · 619 阅读 · 0 评论 -
并发学习笔记 - 原子操作的实现原理
原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。术语 英文 解释 缓存行 Cache line 缓存的最小操作单位 比较并交换 Compare and Swap CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。 CPU流水线 CPU pipe..原创 2020-08-10 10:15:19 · 268 阅读 · 0 评论 -
ThreadLocal 套路
ThreadLocal是什么? 原理是什么? 使用场景? 为什么ThreadLocalMap中的Entity是extend弱引用 设计ThreadLocal的目的 在同一个线程中方法与方法,类与类之间共享内容传输 缺点:因为是以空间换时间,会占用一定内存,所有在使用完成后需要及时删除。 原理 java代码中使用线程是Thread类; Thread中都有一个ThreadLocal.ThreadLocalMap thre...原创 2020-08-03 09:21:34 · 130 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - ThreadLocal
ThreadLocal在数据库连接和session管理下有广泛的应用,了解ThreadLocal对struts、spring等开源代码的理解有很大的帮助。ThreadLocal如果单纯从名字上来看像是“本地线程”这么个意思,只能说这个名字起的确实不太好,很容易让人产生误解,ThreadLocalVariable(线程本地变量)应该是个更好的名字。我们先看一下官方对ThreadLocal的描述:原创 2016-05-09 15:48:16 · 814 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - 反射
反射是什么反射机制简单理解就是指程序在运行的时候能够获取或修改自身信息。如果知道一个类的名称/或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)找出来。如果明确知道这个类里的某个方法名+参数个数 类型,还能通过传递参数来运行那个类里的那个方法,这就是反射。原理概述先介绍运行时类型识别。运行时类型识别(Run-time Type Id原创 2016-04-28 16:14:42 · 435 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - 阻塞队列
在学习线程池前,先要了解一下阻塞队列,这个知识点是线程池的核心。阻塞队列的作用使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被原创 2016-05-05 15:21:29 · 645 阅读 · 0 评论 -
微分享-工作中常用到的java enum实现形式
平时学习很少接触enum,很多时候会使用常量代替。在工作时可能会或多或少用到enum方法,下面是几个工作中常用的方法,基本上能满足绝大多数使用场景。原创 2017-08-26 21:25:50 · 354 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - String
本文适合有一定java基础的同学。本博客宗旨:突出重点,分析难点。String的本质先看一下String源码public final class String implements java.io.Serializable, ComparableString>, CharSequence { /** The value is used for character st原创 2016-05-06 15:29:32 · 746 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - volatile
volatile在多线程并发中用途非常广,原因是它有两个特性:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止进行指令重排序。内存模型的相关概念要想弄明白volatile的原理,先需要知道内存模型的一些概念。先看一个图:计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程原创 2016-05-08 13:54:47 · 879 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - Set 和 List
从学习JAVA到现在也有小十年了,工作一直在用但理论知识确是年年在忘,用了很多学了很多但都系统。人也快30了,而立之年何去何从?最近看到csdn中一个博主写的java系列博客不错,我这人比较懒估计自己从0开始估计写不下来,所以站在“巨人”肩膀上开始自己的笔记,希望能比较系统的将java知识梳理一下。 此blog大量参考Java之美[从菜鸟到高手演变]之集合类,因为已经写得很不错了,此blog会对一原创 2016-05-10 11:33:37 · 1106 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - HashMap
HashMap应该是平时应用开发中或是框架设计中最为常用高效的容器。在介绍HashMap之前,先介绍两个常见的区别。后期会专门介绍CurrentHashMap。hashmap 和 hashtable 区别HashMap和HashTable有什么区别,一个比较简单的回答是:HashMap是非线程安全的,HashTable是线程安全的。HashMap的键和值都允许有null值存在,而HashTabl原创 2016-05-10 16:54:48 · 953 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - NIO (一)
JAVA中最可以大书特书的我觉得至少有两个:一个是NIO,另外一个就是JVM了。这也就是为什么一直我没有去写这两个知识点的原因,因为我一直找不出来一个可以在一篇博文中全部覆盖这个知识点的总结。这两天翻了一下了JAVA中的圣经《think in java》和《Java核心技术》,虽然写的很好,但感觉写的也不是太符合我想一篇博文覆盖NIO知识点的要求。由于NIO本来就是技术难点,并且java对IO的设计原创 2016-05-13 15:56:22 · 4097 阅读 · 1 评论 -
不惑JAVA之JAVA基础 - NIO (二)
上面主要讲解了java IO类及其如何使用,本篇主要讲NIO原理。NIO原理阻塞IO非阻塞与阻塞也就是我们常说的IO与NIO。在聊非阻塞前,我们先来看看网络通讯中的阻塞。常见的网络 IO 通讯流上面是一个网络通信IO流程图,何为阻塞呢 ?在以上过程中若连接还没到来,那么 accept 会阻塞 , 程序运行到这里不得不挂起, CPU 转而执行其他线程。在以上过程中若数据还没准备好, read 会一原创 2016-05-16 15:31:43 · 3640 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - 多线程
Thread 和 Runnable这个没什么好说的,网上一大堆文章。主要记着:使用继承Thread类方式实现;使用实现Runnable接口方式实现。开发中有时会使用下面这种用法:new Thread(new Runnable() { @Override public void run() { ...... }; }).star原创 2016-05-05 14:35:26 · 507 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - 线程池
简单原理一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务时进行等待;任务队列的作用是提供一种缓冲机制,将没有处理的任务放在任务队列中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的原创 2016-05-06 15:24:19 · 806 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - 锁 -synchronized、Lock解析
锁主要解决线程安全问题。而线程安全问题,即多个线程同时访问一个资源时,会导致程序运行结果并不是想看到的结果。synchronized先来了解一下互斥锁,顾名思义:能到达到互斥访问目的的锁。如果对临界资源加上互斥锁,当一个线程在访问该临界资源时,其他线程便只能等待。 在Java中,每一个对象都拥有一个锁标记(monitor),也称为监视器,多线程同时访问某个对象时,线程只有获取了该对象的锁才能访问。原创 2016-05-07 21:54:17 · 2452 阅读 · 0 评论 -
不惑JAVA之JAVA基础 - Concurrent 概述
本来想写ConcurrentHashMap的,但是感觉单写这一个知识点有点烂大街。java.util.concurrent包除了ConcurrentHashMap还是有很多好东西的,下面将会对一些重点知识点进行讲述。由于本人能力有限如有解释不到位的地方请各位大神们指出。本博文参考和引用了大量优秀博文,感谢这些优秀的博主。java.util.concurrent 包含许多线程安全、测试良好、高性能的并原创 2016-05-18 18:13:33 · 4779 阅读 · 1 评论 -
Java容器简介-总汇
容器包含List、ArrayList、Vector及Map、HashMap等;ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而 ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于 ArrayList和HashMap。转载 2012-12-20 14:29:52 · 339 阅读 · 0 评论