concurrent与CopyOnWrite
concurrent与CopyOnWrite 1.1 ConcurrentHashMap/ConcurrentHashSet ```plain text segment:段 将一个HashTable分为很多段,每一个小段相当于一个小的HashTable 最高支持16个段 设计思想:减小锁粒度 底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程...
concurrent与CopyOnWrite 1.1 ConcurrentHashMap/ConcurrentHashSet ```plain text segment:段 将一个HashTable分为很多段,每一个小段相当于一个小的HashTable 最高支持16个段 设计思想:减小锁粒度 底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程...
集合遍历的时候删除元素的方法 在看阿里巴巴java开发手册时,有一条建议是这样的。 【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。 反例: ArrayList<Integer> list = new ArrayList<>();list.add(1...
锁的使用 Concurrent.util常用类 CyclicBarrier: 假设又只有的一个场景:每一个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都要等待。 CountDownLacth使用: 常用于监听某些初始化操作,等初 始化执行完毕后,通知主线程继续。 CountDownLacth countDownLacth = new Cou...
重新认识 Java 中的内存映射(mmap) mmap 基础概念 mmap 是一种内存映射文件的方法,即将一个文件映射到进程的地址空间,实现文件磁盘地址和一段进程虚拟地址的映射。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页到对应的文件磁盘上,即完成了对文件的操作而不必再调用 read,write 等系统调用函数。相反,内核空间对这段区域的修改也直...
线程间通信知识点补充 - 思维导图
线程间的通信 使用wait/notify方法实现线程间的通信 (注意这两个方法都是object的类的方法,也就是java为所有的对象都提供了这两个方法) 1.wait和notify必须配合synchronized关键字一起使用 2.wait方法释放锁,notify方法不释放锁。 java.util.concurrent包下 countDownLatch工具类,可以实时通讯 co...
线程通信-等待通知机制 非等待的线程间通信 public void run() { try { for (int i = 0; i < 10; i++) { list.add(); System.out.println(“添加了” + (i + 1) + “个元素”); Thread.sleep(1000); } } catch (InterruptedException e) {...
前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者...
异常的处理顺序 结语: (假设方法需要返回值) java 的异常处理中, 在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块, 如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法; 如果有 finally 代码块,此时程序执行到 try 代码块里的 ...
并发编程中的一些问题 - 思维导图