摘要:
程序设计语言将实参传递给方法(或函数)的方式分为两种: 值传递 :方法接收的是实参值的拷贝,会创建副本。 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。 在 Java 中只有值传递: 1、传递基本类型参数 public static void ma 阅读全文
摘要:
一、AQS简介 AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类,主要用来构建锁和同步器。 public abstract class Abst 阅读全文
摘要:
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中提供的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒 阅读全文
摘要:
一、synchronized 关键字使用方法 synchronized的作用主要有三个: 原子性:确保线程互斥地访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的“对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作,则将会清空工作 阅读全文
摘要:
一、ThreadPoolExecutor构造函数重要参数 corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。 maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。 keepAliveTime:当线程池中的线 阅读全文
摘要:
Java并发包(java.util.concurrent包,简称J.U.C)的构成: J.U.C核心由5大块组成:atomic包、locks包、collections包、tools包(AQS)、executor包(线程池) 一、Atomic包 Atomic包是java.util.concurrent 阅读全文
摘要:
一、排序 常见的快速排序、归并排序、堆排序、冒泡排序 等属于比较排序 。在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置 。 在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在归并排序、快速排序之类的排 阅读全文
摘要:
一.在java的集合中,判断两个对象是否相等的规则 1.判断两个对象的hashCode是否相等如果不相等,认为两个对象也不相等,完毕如果相等,转入22.判断两个对象用equals运算是否相等如果不相等,认为两个对象也不相等如果相等,认为两个对象相等 1.equals equals()作为方法,实现对 阅读全文
摘要:
一、HashSet简介 HashSet存储的是无序、不重复的对象。每组数据都没有索引,需要通过索引来进行操作的方法都没有,所以也不能使用普通for循环来进行遍历。存储元素的顺序并不是按照存入时的顺序(和List显然不同) 是按照哈希值来存的所以取数据也是按照哈希值取的。 public class H 阅读全文
摘要:
一、HashMap简介 HashMap是基于哈希表的Map接口实现,采用key-value形式存储,其中key是可以允许为null但是只能是一个,并且key不允许重复(如果重复则新值覆盖旧值)。在结构上,HashMap 是由数组+链表+红黑树构成。在添加元素时,通过计算来确定该元素放入的位置,理想状 阅读全文