随笔分类 - Java并发编程
摘要:1.实例封闭:意思是将数据封装在对象内部,它将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据时总能持有正确的锁。当一个非线程安全对象被封装到另一对象中时,能够访问被封装对象的所有代码路径都是已知的。这和在整个程序中直接访问非线程对象相比,更易于对代码进行分析。 PointList 的状态
阅读全文
摘要:https://www.cnblogs.com/aspirant/p/8876670.html 通过调用线程的interrupt()来修改interrupted标志变为true,然后通过isInerrupted()来判断是否interrupted标志 interrupted()方法判断的是当前线程是
阅读全文
摘要:线程池的状态: 线程有五种状态:新建,就绪,运行,阻塞,死亡,线程池同样有五种状态:RUNNING, SHUTDOWN, STOP, TIDYING, TERMINATED。 RUNNING:处于RUNNING状态的线程池能够接受新任务,以及对新添加的任务进行处理。 SHUTDOWN:处于SHUTD
阅读全文
摘要:ScheduledThreadPoolExecutor主要用来在给定的延迟后运行任务,或者定期执行任务。 ScheduledThreadPoolExecutor使用的任务队列DelayQueue封装了一个PriorityQueue,PriorityQueue会对队列中的任务进行排序,执行所需时间短的
阅读全文
摘要:Future: Future: Future是java.util.concurrent包下的一个接口,代表着一个异步计算的结果,可以通过get()获取线程执行的返回值,cancel()取消任务执行,isCancelled()和isDone()获得任务执行的情况 cancel方法: 1、如果任务还未开
阅读全文
摘要:ReentrantReadWriteLock维护着一对锁,一个读锁和一个写锁。通过分离读锁和写锁,使得并发性比一般的排他锁有了较大的提升:在同一时间可以允许多个读线程同时访问,但是在写线程访问时,所有读线程和写线程都会被阻塞。 关于共享变量 在ReentrantLock中使用一个int类型的stat
阅读全文
摘要:1.什么事AQS? 在AQS中存在一个FIFO双向队列,队列中的节点表示被阻塞的线程,队列节点元素有4种类型, 每种类型表示线程被阻塞的原因,这四种类型分别是: CANCELLED : 表示该线程是因为超时或者中断原因而被放到队列中 CONDITION : 表示该线程是因为某个条件不满足而被放到队列
阅读全文
摘要:CountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 构造方法 countDownLatch=new CountDow
阅读全文
摘要:原理: 同一个 ThreadLocal 所包含的对象(对ThreadLocal< String >而言即为 String 类型变量),在不同的 Thread 中有不同的副本,实际上就是不同的实例。 它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal
阅读全文
摘要:死锁的必要条件: 互斥:一份资源每次只能被一个进程或线程使用(在Java中一般体现为,一个对象锁只能被一个线程持有) 请求和保持:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已经被其他进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不释放。 不剥夺:指进程已获得的资源,在未
阅读全文
摘要:这里重点介绍NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCe
阅读全文
摘要:线程池的好处: 第一:降低资源消耗。通过重复利用已创建的线程来降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以可以不用等待线程的创建就能立即执行。 第三:提高线程的可管理性,线程是稀缺资源,不能无限制的创建。 额外好处:有效避免this逃逸问题:this逃逸是指在构造函数返
阅读全文
摘要:Thread使用: class mythread1 extends Thread { int num=10; @Override public void run() { while(num>0) { System.out.println(Thread.currentThread()+"-"+num-
阅读全文
摘要:进程与线程的区别: 进程是是计算机系统资源的最小单位,进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进
阅读全文
摘要:自旋锁和自适应锁: 在互斥同步对性能最大的影响就是阻塞和唤醒线程的实现,因为挂起线程/恢复线程的操作都需要转入内核态中完成(用户态转换到内核态会耗费时间)。 自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们
阅读全文
摘要:首先理解悲观锁和乐观锁: 乐观锁: 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则
阅读全文
摘要:了解一些基本概念: 同步与异步:(主要是针对多个任务或者事件) 同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行(单线程),一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行; 异步:如果有多个任务或者事件发生,这些事件可以并发地执行(多线程或者多进程),一
阅读全文
摘要:在ReentrantLock中我们通过Condition来实现指定线程的唤醒 在CyclicBarrier底层我们也是通过ReentrantLock和Condition实现的 我们知道一个ReentrantLock除了维护一个CLH同步队列,同时它还维持一个Condition条件队列(好像每一个Co
阅读全文
摘要:Lock对象是在java5中加的实现同步的效果,Lock主要是在jdk的层面来实现同步,synchronized是Java的关键字,是java的内置属性,主要在jvm层面上来对临界资源的同步互斥访问。 一. synchronized 的局限性 与 Lock 的优点 如果一个代码块被synchroni
阅读全文
摘要:static加synchronized就是类锁,通常就相当于Something.cSyncA()这样来调用 结论: 1. synchronized static是某个类的范围,synchronized static cSync{} 防止多个线程同时访问多个实例的synchronized static
阅读全文