并发编程
兮小熙
这个作者很懒,什么都没留下…
展开
-
Java高并发程序设计笔记(一)
Java内存模型(JMM)JMM是为了保证多个线程间可以有效地正确地协同工作而诞生的一种规则 JMM的关键技术围绕着多线程的原子性,可见性,有序性来建立的原子性原子性只一个操作时不可中断的,即使是在多线程的环境下,一个操作一旦开始,就不会被其他线程干扰。比如对于一个静态全局变量int i,线程A给它赋值1,线程B给它赋值-1,则不管这连个线程以何种方式赋值,i的值要么是1,要么是-1,线程A和B之原创 2017-01-04 20:02:22 · 493 阅读 · 0 评论 -
Java高并发程序设计笔记(二)
线程的基本操作:新建线程:start()和run()区别start() 会新建一个线程并让线程执行run方法()的代码 (不使用) run()只是在当前线程中串行执行run()方法中的代码终止线程:stop()stop()方法过于暴力,强行把执行到一半的线程终止,并立即释放这个线程持有的锁,而这些锁是用来维护数据对象一致性的,若此时写线程写入数据正写到一半,并强行终止,那么对象就会被写坏,与此同时原创 2017-02-19 16:10:15 · 348 阅读 · 0 评论 -
Java高并发程序设计笔记(六)之CopyOnWriteArrayList与BlockingQuene
高效读取:CopyOnWriteArrayListJDK提供了CopyOnWriteArrayList,对于它来说读取是完全不用加锁的,写入也不会阻塞读取操作,只有写入和写入之间需要同步等待。这样一来度的性能就会大幅度提升。CopyOnWrite就是在写入操作时,进行一次自我复制,换句话说。当这个List需要修改时,并不修改原有内容(这对于保证当前读线程的数据一致性非常重要),而是对原有数据进行一次原创 2017-03-08 15:45:21 · 548 阅读 · 0 评论 -
Java高并发程序设计笔记(五)之Fork/Join框架
一.Fork/Join框架分而治之是一个非常有效的处理大数据的方法,著名的Mapreduce也是采取了分而治之的思想。Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Joi原创 2017-03-01 22:10:34 · 950 阅读 · 0 评论 -
Java高并发程序设计笔记(七)锁的优化
锁的竞争必然会导致程序的整体性能下降,为了将这种副作用降到最低,提出一些关于锁的使用建议:1.减少锁的持有时间以下段代码为例public synchronized void syncMethod() { otherCode1(); mutextMethod(); otherCode2(); }在syncMethod方法中只有mutextMethod( )是需要同步的,而oth原创 2017-03-08 19:29:55 · 459 阅读 · 0 评论 -
Java高并发程序设计笔记(三)之Volatile与Lock
volatile关键字为了在适当的场合确保线程间的有序性,原子性和一致性,Java使用了一些特殊的关键字或者操作来声明,告诉虚拟机,这些地方要尤其注意,不能随意变化优化目标的指令。关键字volatile就是其中之一。当声明了volatile变量时就等于告诉了虚拟机,这个变量极有可能被某些程序或者线程修改。为了确保这个变量被修改后,应用程序内的所有线程都能看到这个改动,虚拟机必须采取一些特殊的手段,保原创 2017-02-19 19:53:40 · 754 阅读 · 0 评论 -
Java高并发程序设计笔记(八)之Future设计模式
Future是多线程开发中一种常用的设计模式,它的核心思想是异步调用。去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑。例如如下的请求调用过程时序图。当call请求发出时,需要很长的时间才能返回。左边的图需要一直等待,等返回数据后才能继续其他操作;而右边的Future模式的图中客户端则无需等到可以调用其他业务逻辑,充分利用了等待时间。服务器段接收到请求后立即返回结果给客户端原创 2017-03-12 20:02:32 · 744 阅读 · 0 评论 -
Java高并发程序设计笔记(四)之线程池
一.线程池多线程可以最大限度地发挥多核处理器的计算能力,提高生产系统的吞吐量和性能。但是若果不加控制和管理随意使用线程,对系统的性能反而会产生不利的影响。线程的创建和关闭也需要花费时间,如果为每一个小的任务都要创建一个线程,很有可能出现创建和销毁线程的时间远大于真实工作所消耗的时间,反而会得不偿失。其次线程本身也要占用内存空间,大量的线程会抢占宝贵的内存资源,如果处理不当会导致内存溢出,大量的线程回原创 2017-03-01 18:11:48 · 859 阅读 · 0 评论