![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础知识
文章平均质量分 53
zjs_scallop
这个作者很懒,什么都没留下…
展开
-
volatile、CAS、synchronized
volatile 特性: 保证可见性,不保证原子性 当写一个volatile变量时,JMM会把该线程本地内存中的变量强制刷新到主内存中去; 这个写会操作会导致其他线程中的volatile变量缓存无效。 保证顺序性:禁止指令重排 a.当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行; b.在进行指令优化时,不能将对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句原创 2021-03-18 22:11:07 · 119 阅读 · 0 评论 -
重入锁(ReentranLock)
表示该锁能够支持一个线程对资源的重复加锁 支持获取锁的时候的公平和非公平性选择 如果在绝对时间上,先对锁进行获取的请求一定先被满足,那么这个锁是公平的,反之则是不公平的。 ReentranLock提供了一个构造函数,能够控制锁是否是公平的。 公平锁机制往往没有非公平的效率高 公平锁能减少饥饿发生的概率 实现重进入 线程再次获取锁 锁的最终释放 实现: 线程获取锁的时候检查同步状态,如果为0尝试获取,如果不为0,判断持有锁的是不是当前线程,如果是增加同步状态 线程释放锁的时候减少同步状态,当同步状.原创 2021-03-18 22:08:16 · 88 阅读 · 0 评论 -
读写锁(ReadWriteLock)
读写锁拥有比排他锁更好的并发性和吞吐量 readLock() writeLock() 其他展示内部工作状态的方法 int getReadLockCount():返回当前读锁被获取的次数 int getReadHoldCount():返回当前线程获取读锁的次数 boolean isWriteLocked():判断写锁是否被获取 int getWriteHoldCount():返回当前写锁被获取的次数 读写状态设计 依赖自定义同步器来实现同步功能 在同步状态(一个整性变量)上维护多个读线程和一个写线程.原创 2021-03-18 21:26:51 · 149 阅读 · 0 评论 -
Java23种设计模式之创建型模式
学习自http://c.biancheng.net/view/8508.html 设计原则 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8ZyTyxU-1615194675655)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210308111154427.png)] 创建型模式 特点:将对象的创建与使用分离 单例模式 对象创建型模式 指一个类只有一个实例,且该类能自行创建这转载 2021-03-08 17:13:32 · 61 阅读 · 0 评论 -
AQS源码详解——独占锁(acquire、release)
acquire(int arg) 获取独占资源 public final void acquire(int arg) { //1、尝试获取独占资源 成功返回 失败进行下一步 // 2、生成节点,将其添加进同步队列 竞争成功返回 //3、若线程在不可中断的时候被中断了 if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXC原创 2021-03-02 17:32:14 · 233 阅读 · 0 评论 -
JVM_内存管理
自动内存管理 运行时数据区 线程独享 虚拟机栈(执行Java方法也就是字节码服务) 1、局部变量表 1)存放信息 ①基本数据类型(boolean、byte、char、short、int、float、long、double) ②对象引用 a.reference类型 b.不等同于对象本身 c.可原创 2021-02-22 18:30:42 · 86 阅读 · 0 评论 -
Deque 双端队列
Deque 双端队列 继承自Queue接口 实现类: 常用LinkedList实现。 常用方法有如下,以及Queue中的方法 第一个元素 (头部) 最后一个元素 (尾部) 抛出异常 特殊值 抛出异常 特殊值 插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e) 删除 removeFirst() pollFirst() removeLast() pollLast() 检查 getFirst() peekFi原创 2021-02-21 22:27:00 · 78 阅读 · 0 评论 -
getOrDefault()
map.getOrDefault(Object key, V defaultValue) 当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用defaultValue原创 2021-02-21 22:23:18 · 264 阅读 · 0 评论 -
每天一个Linux
转载至https://blog.csdn.net/weixin_43314519/article/details/106934678?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.add_param_isCf 一、基本命令操作 常用键 Tab按转载 2020-10-11 10:31:04 · 78 阅读 · 0 评论 -
浅淡hashmap(Java)
适用场景 读多写少(一般场景:一次写入后只剩下读) 时间复杂度 插入操作时间复杂度为O(1) 读取操作时间复杂度为O(1) 核心组成 散列表(链接法解决冲突) 散列表+红黑树( jdk1.8的新特性:当散列表格里面的数不超过8时,里面存的是链表,超过8时里面存的是红黑树(自平衡二叉查找树)从根节点开始,边比较边插入) 重hash 目的:避免数据倾斜,很多数存储到相同散列格里 需自行设置限定一个散列...原创 2020-01-28 16:49:40 · 100 阅读 · 0 评论 -
浅谈线程(Java)
线程及其一些相关概念 进程是操作系统中进行保护和资源分配的基本单位,操作系统分配资源以进程为基本单位。而线程是进程的组成部分,它代表了一条顺序的执行流。 其中main方法为主线程,其他开辟的线程称为子线程。 每创建一个新的线程,就会开辟一个新的栈。 当执行多个线程的时候拷贝run方法以及其内部生成的变量各一份。 (由此可以看出,run方法是绝对安全的,对run方法进行上锁是毫无意义的。因为每个线程...原创 2020-01-24 18:30:07 · 194 阅读 · 1 评论 -
Java基础知识_反射
1、getClass()方法 Employee e; Class c1 = e.getClass(); 2、调用静态方法forName获得类名对应的Class对象 String className = “java.util.Radom”; Class C1 = Class.forName(className); 如果类名保存在字符串中,并可在运行中改变,就可以使用这个方法。当然,这个方法只有在cl...原创 2020-01-19 17:42:53 · 235 阅读 · 0 评论 -
Java基础知识_内部类
1、内部类既可以访问自身数据域,也可以访问它的外围类对象的数据域 若有重名,优先调用内部类中定义的同名变量。 在其他类中,通过 外部类.内部类的形式进行访问 People.Compare compare = new Compare(); 2、内部类中所有静态域都必须是 final。 3、局部类不能用public或private访问符进行声明。与其他内部类相比,局部类还有一个优点。它们不仅能够访问包含它们的外部类,还可以访问局部变量。不过这些局部变量必须为事实上的final。 3、由于构造器的名字必须原创 2021-02-20 22:21:41 · 68 阅读 · 0 评论 -
Java基础知识_类、方法、面向对象
类 构造函数 和类名一致 可以进行重载 不可以重写 没有返回值 new 调用 如果没有自定义的构造函数,那么java会创建一个无参构造函数 super this(位于构造函数中有效代码的第一行) 隐式参数和显式参数 this 指向的是 谁调用这个方法就指向谁 public void setSex(int sexGet){ this.sex = sexGet; //此处的this即为下文中的对象s,是该函数的隐式参数 //sexGet为显示参数 } Student s原创 2021-02-20 22:09:37 · 69 阅读 · 0 评论 -
Java基础知识_基本类型的运用
整型 int 正负20亿() 拆箱和装箱 .valueOf();//装箱 .intValue();//拆箱 java编译器做的自动拆装箱 128陷阱[-128,127],高点可自行设置 (Integer使用较多,应用得当可节约内存) long 128陷阱[-128,127],边界不可更改 short byte 浮点型 float(转到int时可能会出现精度缺失) double 相乘时会出现精度缺失的情况,可先转为BigDecimal再做乘法运算)原创 2021-02-20 21:11:41 · 81 阅读 · 0 评论