Git Git实战第1章 Git概述Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion(svn)、CVS、Perforce和ClearCase等版本控制工具。 1. 何为版本控制版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的 2025-11-13 #Git
HashMap 1.HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key(一个)、value(多个)(HashTable不允许)都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMa 2025-11-13 #Java
03并发容器(无hashmap) 并发容器类整体架构如下图所示: 并发 MapConcurrentMap 接口ConcurrentMap 接口继承了 Map 接口,在 Map 接口的基础上又定义了四个方法: putIfAbsent: 与原有 put 方法不同的是,putIfAbsent 如果插入的 key 相同,则不替换原有的 value 值; remove: 与原有 remove 方法不同的是,新 remove 方法中增加了对 2025-11-13 #JUC
04Threadlocal和poll Threadlocal是什么ThreadLocal叫做线程变量,意思是ThreadLocal中*****填充的变量**属于当前线程***,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 线程安全问题的核心在于多个线程会对同一个临界区的共享资源进行访问,那如果每个线程都拥有自己的“共 2025-11-13 #JUC
并发容器 a简介java.util 包下提供了一些容器类(集合框架),其中 Vector 和 Hashtable 是线程安全的,但实现方式比较粗暴,通过在方法上加「sychronized」关键字实现。 但即便是 Vector 这样线程安全的类,在应对多线程的复合操作时也需要在客户端继续加锁以保证原子性。 。 阻塞队列我们假设一种场景,生产者一直生产资源,消费者一直消费资源(后面会细讲,戳链接直达),资源存 2025-11-13 #JUC
队列的API a一对儿比如“添加”操作可以用的方法有:add/offer/push/offerFirst/offerLast,“删除”操作可以用的方法有:remove/pop/poll/pollFirst/pollLast。 经过一番学习和测试以后,得出以下结论:这些方法从设计之初,分别来自于集合Collections,队列Queue,栈Stack,双端队列Deque,因此它们是有语义的,不建议笼统归为添加 2025-11-13 #API
02Condition和support Condition 调用 condition.await 方法后线程依次尾插入到了等待队列中,依次为 Thread-0,Thread-1,Thread-2….Thread-8; 等待队列是一个单向队列。示意图如下: 等待队列的示意图 同时还有一点需要注意:我们可以多次调用newCondition()方法创建多个 Condition 对象,也就是一个 lock 可以持有多个等待队列。 而如果是 O 2025-11-13 #JUC
01CASAQSLOCK 隐式锁(synchronized)java中的锁包含了内部锁和显示锁。内部锁是通过synchronized关键字实现的 ;显示锁是通过Lock接口来进行实现。 synchronized概述 特点: 1、synchronized关键字可以用来修饰方法(静态和非静态)和代码块。 2、被synchronized修饰的方法被称之为同步方法,被synchronized修饰的代码块被称之同步代码块。 3、同步 2025-11-13 #JUC
00JUC入门 线程入门多线程的很多概念听起来就很难理解。比方说: 进程,是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发。 线程,是进程的子任务,是 CPU 调度和分派的基本单位,实现了进程内部的并发。 总结来说,进程和线程都是操作系统用于并发执行的方式,但是它们在资源管理、独立性、开销以及影响范围等方面有所不同。 进程是操作系统分配资源的基本单位,线程是操作系统调度的基本单 2025-11-13 #JUC
leetcode:回溯的j--和j-1和--j x看问题为什么下面两段代码不一样: 123456789101112131415161718192021class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> ans =new ArrayLis 2025-09-15 #leetcode