
java
文章平均质量分 66
zhujilisa
这个作者很懒,什么都没留下…
展开
-
java并发编程-线程池
Executors提供了各种线程池类型创建的静态方法,如常见的newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool、newSingleThreadScheduledExecutor。shutdownNow():立即关闭线程池,正在执行中的任务和队列中的任务都会被中断,同时返回被中断的队列中的任务列表。shutdown():关闭线程池,正在执行中的任务和队列中的任务都能执行完成,后续进来的新任务会被执行拒绝策略。原创 2025-04-22 19:36:14 · 737 阅读 · 0 评论 -
java并发编程-高性能内存队列
juc下的队列大部分采用有界队列,有界队列通常采用数组实现。Disruptor实现了队列的功能并且是一个有界队列,可以用于生产者-消费者模型。在CPU多核缓存架构中,每个处理器都有一个单独的缓存,共享数据可能有多个副本:一个副本在主内存中,一个副本在请求它的每个处理器的本地缓存中。如果多个核上的线程在操作同一个缓存行(linux下缓存行有64个字节)中的不同变量数据,那么就会出现频繁的缓存失效,即使在代码层面看这两个线程操作的数据之间完全没有关系。ProductType:生产者类型:单生产者、多生产者。原创 2025-04-22 19:35:14 · 371 阅读 · 0 评论 -
java并发编程-JMM内存模型
原子性、可见性、有序性。原创 2025-04-22 15:11:38 · 302 阅读 · 0 评论 -
java并发编程-ForkJoinPool
Fork/Join是一个是一个并行计算的框架,主要就是用来支持分治任务模型的,这个计算框架里的Fork对应的是分治任务模型里的任务分解,Join对应的是结果合并。ForkJoinPool是一个线程池,它用于管理ForkJoin任务的执行。ForkJoinTask最核心的是fork()方法和join()方法: fork()方法用于向当前任务所运行的线程池中提交任务。调用join()时,将阻塞当前线程直到对应的子任务完成运行并返回结果。:指定异常处理器,当任务在运行中出错时,将由设定的处理器处理;原创 2025-04-18 17:37:54 · 819 阅读 · 0 评论 -
java 并发编程-阻塞队列
也是是用两个Condition实现阻塞。阻塞队列(BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;PriorityBlockingQueue是一个无界的基于数组的优先级阻塞队列,队列中每个元素都有一个优先级,出队的时候,优先级最高的先出。延迟队列的特点是:不是先进先出,而是会按照延迟时间的长短来排序,下一个即将执行的任务会排到队列的最前面。原创 2025-04-03 17:25:09 · 332 阅读 · 0 评论 -
java并发编程-并发容器
原创 2025-04-03 11:21:46 · 511 阅读 · 0 评论 -
java 并发编程-CyclicBarrier
CyclicBarrier(回环栅栏或循环屏障),是Java并发库中的一个同步工具,通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。与CountDownLatch的区别是CyclicBarrier是可以循环使用的。原创 2025-04-01 13:24:07 · 344 阅读 · 0 评论 -
java 并发编程-CountDownLatch
CountDownLatch(闭锁)是一个同步协助类,可以用于控制一个或多个线程等待多个任务完成后再执行。CountDownLatch内部维护了一个计数器,该计数器初始值为N,代表需要等待的线程数目,当一个线程完成了需要等待的任务后,就会调用countDown()方法将计数器减1。CountDownLatch的构造非常简单,需要给定一个不能小于0的int数字。,当计数器的值为0时,等待的线程就会开始执行。原创 2025-04-01 11:37:31 · 209 阅读 · 0 评论 -
java 并发编程-Semaphore
Semaphore(信号量)是一种用于多线程编程的同步工具,主要用于在一个时刻允许多个线程对共享资源进行并行操作的场景。原创 2025-04-01 10:37:27 · 301 阅读 · 0 评论 -
java 并发编程-ReentrantLock
当有线程调用lock方法的时候:如果线程获取到锁了,那么就会通过CAS的方式把AQS内部的state设置成为1。这个时候,当前线程就获取到锁了。只有首部的节点(head节点封装的线程)可以获取到锁。如果是公平锁的话,当head节点释放锁之后,会优先唤醒head.next这一个节点对应的线程。相当于synchronized中的wait()和notify()机制,通常与Lock接口(比如ReentrantLock)一起使用。允许新来的线程和head之后唤醒的线程通过cas竞争锁。原创 2025-03-31 17:26:43 · 331 阅读 · 0 评论 -
java 锁升级
调用锁对象的obj.hashCode()或System.identityHashCode(obj)方法会导致该对象的偏向锁被撤销。因为对于一个对象,其HashCode只会生成一次并保存,偏向锁是没有地方保存hashcode的。此时会直接升级成为轻量级锁或重量级锁。原创 2025-03-31 13:17:02 · 394 阅读 · 0 评论 -
java并发编程4
CAS指令操作包括三个参数:内存值(内存地址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值E和内存值V相同时,才更新内存值为N,否则就不执行更新,无论更新与否都会返回否会返回旧的内存值V,上述的处理过程是一个原子操作。当有多个线程对一个原子类进行操作的时候,某个线程在短时间内将原子类的值A修改为B,又马上将其修改为A,此时其他线程不感知,还是会修改成功。原创 2025-03-27 15:32:51 · 207 阅读 · 0 评论 -
java 并发编程3
ThreadLocal原创 2025-03-25 15:43:07 · 148 阅读 · 0 评论 -
java并发编程2
如果多个线程的业务存在依赖、串行、聚合等关系,这时候我们可以使用CompletableFuture。CompletableFuture实现了对任务的编排能力。相比于Runnable,Future可以获取返回值,取消任务,查看任务是否完成等。原创 2025-03-25 10:25:00 · 199 阅读 · 0 评论 -
java并发编程1
【代码】java并发编程1。原创 2025-03-24 12:56:07 · 879 阅读 · 0 评论 -
JVM 内存模型
JVM 虚拟机原创 2025-03-13 16:00:02 · 434 阅读 · 0 评论 -
JVM类加载
引导类加载器(BootstrapClassLoader):加载 JVM 核心类库(如 rt.jar 中的类),位于 JAVA_HOME/lib 目录下。自定义类加载器:可以自定义类加载器加载指定目录下的类。扩展类加载器(ExtClassLoader):加载扩展类库,位于 JAVA_HOME/lib/ext 目录下。应用程序类加载器(ExtClassLoader):加载用户类路径(ClassPath)下的类。准备:给类的静态变量分配内存,并赋默认值。加载:查找并加载类的字节码文件。原创 2025-03-11 14:44:45 · 367 阅读 · 0 评论 -
CGLib动态代理
【代码】CGLib动态代理。原创 2025-01-09 10:42:33 · 209 阅读 · 0 评论 -
jdk动态代理
jdk动态代理原创 2025-01-07 19:53:23 · 319 阅读 · 0 评论