热文Java ABA 问题
CAS 会导致“ABA问题”。 CAS 算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。 比如说一个线程 o...
CAS 会导致“ABA问题”。 CAS 算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。 比如说一个线程 o...
CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失...
synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。 lock(显...
同步代码块是使用 monitorenter 和 monitorexit 指令实现的,同步方法(在这看不出来需要看 JVM 底层实现)依靠的是方法修饰符上的 ACC_SYN...
在 JVM 底层 volatile 是采用“内存屏障”来实现的 缓存一致性协议(MESI协议)它确保每个缓存中使用的共享变量的副本是一致的。其核心思想如下:当某个 CPU...
在 Executors 类里面提供了一些静态工厂,生成一些常用的线程池。 newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持...
ThreadLocal 提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal 相当于提供了一...
CountDownLatch 的作用是允许 1 或 N 个线程等待其他线程完成执行;而 CyclicBarrier 则是允许 N 个线程相互等待。 CountDownLa...
当一个线程到达 exchange 调用点时,如果它的伙伴线程此前已经调用了此方法,那么它的伙伴会被调度唤醒并与之进行对象交换,然后各自返回。如果它的伙伴还没到达交换点,那...
Semaphore 直译为信号。实际上 Semaphore 可以看做是一个信号的集合。不同的线程能够从 Semaphore 中获取若干个信号量。当 Semaphore 对...
CyclicBarrier 是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点(CommonBarrierPoint)。因为该 barrier 在释放等待线程...
CountDownLatch 内部维护了一个整数 n,n(要大于等于0)在 当前线程 初始化 CountDownLatch 方法指定。当前线程调用 CountDownLa...
`sleep()` 方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也...
定义 Thread 类的子类,并重写该类的 `run` 方法,该 `run` 方法的方法体就代表了线程要完成的任务。因此把 `run()` 方法称为执行体。 - 创建 T...
ConcurrentHashMap 采用了非常精妙的"分段锁"策略,ConcurrentHashMap 的主干是个 Segment 数组。Segment 继承了 Reen...
HashMap 基于 hashing 原理,我们通过 put() 和 get() 方法储存和获取对象。当我们将键值对传递给 put() 方法时,它调用键对象的 hashC...
放入 HashMap 的元素是 key-value 对。 - 底层说白了就是散列结构。 - 要将元素放入到 HashMap 中,那么 key 的类型必须要实现 hashc...
HashMap 几乎可以等价于 HashTable,除了 HashMap 是非 synchronized 的,并可以接受 null(HashMap 可以接受为 null ...
同步性:Vector 是线程安全的,也就是说是同步的 ,而 ArrayList 是线程不安全的,不是同步的。 - 数据增长:当需要增长时,Vector 默认增长为原来一倍...
因为 Array 是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array 获取数据的时间复杂度是 `O(1)`,但是要删除数据却是开销很...
List 特点:元素有放入顺序,元素可重复; - Map 特点:元素按键值对存储,无放入顺序 ; - List 接口有三个实现类:LinkedList,ArrayLis...
List, Set 都是继承自 Collection 接口 - List 特点:元素有放入顺序,元素可重复。Set 特点:元素无放入顺序,元素不可重复(注意:元素虽然无放...
window.location` 对象可用于获取当前页面地址(URL)并把浏览器重定向到新页面。 window.location 对象可不带 window 前缀书写。
`vim /usr/local/etc/my.cnf `添加以下配置 ```shell expire_logs_days = 5 定期清理 log-bin = /u...
MVC 是三个单词的首字母缩写,它们是 Model(模型)、View(视图)和 Controller(控制)。 这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层:
向 DriverManager 类注册驱动数据库驱动程序 - 调用 DriverManager.getConnection 方法, 通过 JDBC URL,用户名,密码取...
在支持 Session 复制的 Web 服务器上,通过修改 Web 服务器的配置,可以实现将 Session 同步到其它 Web 服务器上,达到每个 Web 服务器上都保...