随笔分类 - 并发编程
摘要:ReentrantReadWriteLock的写锁 "加锁"的过程: ReentrantReadWriteLock的写锁 "释放锁" 的过程: 参考文档:读写锁ReadWriteLock的实现原理
阅读全文
摘要:(一)runnable 与Callable的区别 @FunctionalInterface public interface Runnable { public abstract void run(); } @FunctionalInterface public interface Callable
阅读全文
摘要:1 进程与线程:进程指正在运行的程序,进程拥有一个完整的、私有的基本运行资源集合。它有自己的内存空间。为了便于进程之间的通信,大多数操作系统都都支持进程间通信(IPC). IPC通信包括管道、消息队列、信号量、共享存储、socket、streams.其中socket与streams支持在不同主机上的
阅读全文
摘要:Object类当中包含的⽅法有12个: 1.需要重写 toString(),equals(),hashCode();2.线程有关:wait方法, notify(), notifyAll();3.其他 getClass(),finalize(), clone(),registerNatives; 1
阅读全文
摘要:线程池的优点: 线程池主要解决两个问题:在执行异步任务时,如果不使用线程池时就需要new 一个线程来执行,而线程的创建与销毁是需要开销的。通过线程池可以复用里面的线程,不需要每次执行新任务时都重新创建和销毁线程。此外线程池还提供了一种资源限制和管理的手段,比如限制线程个数,动态增加线程等。甚至有些线
阅读全文
摘要:在执行线程任务时,时常会遇到需要多个线程执行完成之后,才进行下一步操作。线程中有三个工具可以实现此功能,下面进行一一介绍: (一) CountDownLatch CountDownLatch依赖于抽象同步队列实现,当new 一个countDownLatch对象时传入计数器参数,执行await方法时进
阅读全文
摘要:创建一个线程的方式: 创建线程的方式总体可以分为两大类:一个是依赖于Thread类, 一个是依赖于线程池。 依赖于Thread类的创建方式: package concurrent.newThread; import java.util.concurrent.*; public class NewTh
阅读全文
摘要:AtomIcLong介绍: 递增操作代码: public final long incrementAndGet() { return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L; } 递减操作代码: public final long decre
阅读全文
摘要:Random介绍: Random: 随机数的生成需要一个默认的种子,这个种子其实是一个long类型的数字,你可以在创建Random对象时通过构造函数指定,如果不指定则在默认构造函数内部生成一个默认的值。 新的随机数的生成需要两个步骤:● 首先根据老的种子生成新的种子。● 然后根据新的种子来计算新的随
阅读全文
摘要:悲观锁:对数据被外界修改持保守态度,任务数据很容易被其他线程修改,所以在数据被处理以前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态,其它线程就无法访问。悲观锁是排它锁。 乐观锁:总认为资源和数据不会被别人所修改,所以读取不会上锁,但是乐观锁在进行写入操作的时候会判断当前数据是否被修改
阅读全文
摘要:多线程并发编程: 并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。在单CPU时代多
阅读全文