JUC
方圆师兄
分享知识,降低初学者学习成本
展开
-
JUC-- synchronized锁 以及 lock锁
一段代码说明锁的作用 public class Test { private static int a; private static int b; private static int c; static Lock lock = new ReentrantLock(); private synchronized static void incrOfa() { a++; } private static void incrOfb() { b++; } private s原创 2022-01-13 15:03:31 · 772 阅读 · 0 评论 -
JUC--集合
java.util.concurrent 锁: synchronized:关键词、粒度大、可重入、非公平 Lock:类、细粒度、可重入、可公平可非公平 //多线程下操作同一个资源,未加锁情况下 public static void main(String[] args) { List<String> list = new ArrayList<String>(); for (int j = 0; j < 10; j++) { for (int i = 0; i &原创 2021-11-16 11:19:55 · 285 阅读 · 0 评论 -
JUC--CountDownLatch
CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助 多线程情况下,每条线程执行顺序不固定,如果有业务代码需要在多线程执行后在执行就会出现类似于指令重排一样 public static void main(String[] args) throws Exception { for (int i = 0; i < 10; i++) { final int a = i; new Thread(()->{ try { Tim原创 2021-11-16 13:42:12 · 552 阅读 · 0 评论 -
JUC--CyclicBarrier
CyclicBarrier 允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。 ...原创 2021-11-16 14:07:26 · 111 阅读 · 0 评论 -
JUC--Semaphore
Semaphore 一个计数信号量。 在概念上,信号量维持一组许可证。 如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。 每个release()添加许可证,潜在地释放阻塞获取方。 但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。主要进行一系列限流 public static void main(String[] args) throws Exception { Semaphore semaphore = new Semaphore(5原创 2021-11-16 14:13:08 · 150 阅读 · 0 评论 -
JUC--ThreadPoolExecutor
自定义线程池ThreadPoolExecutor public static void main(String[] args) throws Exception { ThreadPoolExecutor executor = new ThreadPoolExecutor(2, //核心线程数量 5, //最大线程数量 10, //等待时间 TimeUnit.MINUTES,//等待时间单位原创 2021-11-16 14:26:31 · 312 阅读 · 0 评论 -
JUC--volatile
volatile 关键字 private static int num = 0; public static void main(String[] args) throws Exception { new Thread(() -> { while(num==0) {} }).start(); TimeUnit.SECONDS.sleep(2); num=1; } 结果--------开辟的线程拿到的num是0一直在循环 加上 volatile 看看结果 vol原创 2021-11-16 14:42:01 · 250 阅读 · 0 评论 -
JUC--Atomic
对数字进行多线程递增操作 static AtomicLong atomicLong = new AtomicLong(0); static volatile int num = 0; static void incr() { num++; } public static void main(String[] args) throws Exception { for (int i = 0; i < 10; i++) { for (int j = 0; j < 1000原创 2021-11-16 16:06:41 · 227 阅读 · 0 评论