04 2022 档案
归并求小和
摘要:public class SmallSum { public static int sum=0; public static void main(String[] args) { //int[] arr={1,3,4,2,5}; int[] arr={1,3}; process(arr,0,arr.
阅读全文
递归求最值
摘要:public class RecSort { public static void main(String[] args) { int[] arr={3,1,5,2,4,-1}; int rec = rec(arr, 0, arr.length - 1); System.out.println(re
阅读全文
归并排序
摘要:public static void main(String[] args) { int[] arr={3,1,5,2,4,-1}; rec(arr,0,arr.length-1); for (int i : arr) { System.out.println(i); } } public stat
阅读全文
15.锁绑定多个条件Condition
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
阅读全文
14.线程通信之生产者消费者传统版(lock, await, signal)
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
阅读全文
13.BlockingQueue
摘要:1.BlockingQueue的核心方法 2.阻塞超时放弃演示 package com.mydemo; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import
阅读全文
12.Semaphore
摘要:1.定义 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制 正常的锁(concurrency.locks或synchronized锁)在任何时刻都只允许一个任务访问一项资源,而 Semaphore允许n个任务同时访问这个资源。 模拟一个抢车位的场景,假设一共有6个
阅读全文
11.CyclicBarrier
摘要:1.定义 CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await
阅读全文
10.CountDownLatch
摘要:1.定义 让一线程阻塞直到另一些线程完成一系列操作才被唤醒。 CountDownLatch主要有两个方法(await(),countDown())。 当一个或多个线程调用await()时,调用线程会被阻塞。其它线程调用countDown()会将计数器减1(调用countDown方法的线程不会阻塞),
阅读全文
9.java锁之读写锁代码验证
摘要:1.实现一个读写缓存的操作,假设开始没有加锁的时候,会出现什么情况 import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; class MyCache { private volati
阅读全文
8.java锁之自旋锁代码验证
摘要:package com.mydemo; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import static java.lang.Thread.currentTh
阅读全文
7.java锁之可重入锁和递归锁代码验证 Synchronized以及ReentrantLock可重入锁演示程序
摘要:1.可重入锁(也叫做递归锁) 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。 也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。 ReentrantLock/synchronized就是一个典型的可重入
阅读全文
5.集合类不安全之Set
摘要:package com.mydemo; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.concurrent.C
阅读全文
6.集合类不安全之Map
摘要:package com.mydemo; import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class MapNotSafeDemo { public static void main(String[]
阅读全文
4.集合类不安全之并发修改异常
摘要:1.list不安全 package com.mydemo; import java.util.ArrayList; import java.util.UUID; import java.util.Vector; import java.util.concurrent.CopyOnWriteArray
阅读全文
3.CAS源码探索
摘要:1.Compare And Set 示例程序 package com.mydemo; import java.util.concurrent.atomic.AtomicInteger; public class CASDemo { public static void main(String[] a
阅读全文
2.volatile不保证原子性
摘要:package com.mydemo; public class MyData2 { volatile int number=0; public void addPlusPlus() { number ++; } } class VolatileAtomicityDemo { public stat
阅读全文
1.可见性的代码验证说明
摘要:1.在修改完number值以后,while循环并没有检查到 package com.mydemo; import java.util.concurrent.TimeUnit; public class MyData { public int number=0; public void add_to_
阅读全文