
JavaConcurrentPractice
文章平均质量分 92
Java编写线程安全的程序,利用并发编程思想处理线程并发问题。并发实战处理(私有博文)。
boonya
资深Java,热衷大数据,Python爬虫,持续探索副业中,有需要的可以加我微信联系:boonya221
展开
-
Java基于队列和数据库批量维护用户在线离线状态和位置信息
目录前言介绍用户数据迁移用户状态数据批量处理队列数据批量消费前言介绍系统用户实时位置都保存在redis中,我们采用redis过期方式来监听用户位置离线,离线的用户key会放入对应的队列进行消费(这里的队列可以是Java队列也可以是RabbitMQ之类的消息中间件,我们采用的是ConcurrentLinkedQueue)。项目中对用户实时位置有两个要求(特殊行业对人员位置安全规范的要求):a.用户最后一次经纬度实时位置更新到数据库 b.用户离线后更新用户在线状态为了解决每次用户原创 2020-08-29 22:04:41 · 950 阅读 · 1 评论 -
SpringBoot异步接口调用与多线程线程池使用注意事项说明
Java多线程相关说明异步调用分为两类有返回值:用户需要Callable、Futrue等来接收最终的处理结果,但这个过程是异步非阻塞的。 无返回值:用户提交请求到接口之后不需要任何返回值,请求到达服务端之后就没有任何关系了,用户可以不等待而去做其他的业务操作。多线程调用方法Callable:有返回值的线程方法,call 将会对用户请求做出结果反馈。 Runnable:线程的接口,...原创 2020-04-27 18:24:57 · 8721 阅读 · 0 评论 -
Java并发编程线程任务返回值及顺序问题解决方案
目录核心知识点无返回值并发执行顺序控制有返回值或先后顺序控制Future FutureTask CompletionService CompletableFutrue比较CountDownLatchCyclicBarrierFutureTaskCompletionServiceCompletableFuture核心知识点无返回值并发执行顺序控制...原创 2020-04-01 14:13:25 · 1708 阅读 · 0 评论 -
Java并发编程实践:CountDownLatch模拟并发请求及注意事项
原子锁是:Atomic*类的封装类型,如:AtomicInteger、AtomicLong。 CountDownLatch:是我们熟悉的栅栏,当值为0时就绪否则等待阻塞,最形象的就像赛马,发令枪不响所有马和运动员只能等。import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService...原创 2020-03-01 23:19:35 · 740 阅读 · 0 评论 -
Java并发编程实践(Java concurrency in practice)在线示例学习
学习Java并发编程,这里提供一个快速学习通道:http://jcip.net.s3-website-us-east-1.amazonaws.com/,在这里你可以快速地获取到学习资源代码示例。在线文档:http://jcip.net.s3-website-us-east-1.amazonaws.com/annotations/doc/index.html在线示例:http://j原创 2015-03-19 20:55:04 · 3636 阅读 · 0 评论 -
Java并发编程规则:判定对象是否存在多线程访问
判定规则:无论何时,只要存在多于一个线程访问给定的状态变量,而其中某个线程会写入该变量,此时必须使用同步来协调对线程的访问。关键字使用:使用关键字synchronized和volatile来实现变量修改的同步。一般将涉及的变量修改的方法改为synchronized修饰的方法public synchronized void change(){} ,将可变对象用synchroniz原创 2016-12-07 16:52:17 · 2046 阅读 · 0 评论 -
Java并发编程规则:有状态的线程安全对象在线程池中使用不一定就是线程安全的
如题:Java并发编程规则>有状态的线程安全对象在线程池中使用不一定就是线程安全的。在线程安全里面我们可以用的几个关键字是:volatile、Synchronized,另外状态变量我们可以使用原子变量。如果我们在编写了一个状态安全的线程类后,却不慎使用线程池,那么也会导致线程不安全问题产生。原创 2017-03-22 17:33:36 · 1304 阅读 · 0 评论 -
Java并发编程规则:无状态对象永远是线程安全的
规则说明:无状态类是指:其本身没有内部变量和外部变量的操作的,在每个用户访问的线程栈中都是一个各自的实例。线程安全的表现:一个线程对该类的访问不会影响其他线程的访问结果。无状态类示例:package net.jcip.examples;import java.math.BigInteger;import javax.servlet.*;import net.jci原创 2016-12-07 17:44:52 · 4316 阅读 · 0 评论 -
Java并发编程规则:原子变量实现线程安全
判定规则:如果一个类中存在变量,并且此变量的操作不是原子操作,那么这个类就是非线程安全的类。在线程产生竞争条件的情况下,多线程访问导致原子性不可保证。常见原子变量:在java.util.concurrent.atomic包下还有很多类,使用这些类可以保证对这些类的诸如“获取-更新”操作是原子性的,从而避发生竞争条件。常见的原子变量: AtomicBoolean //可以用原子原创 2016-12-07 18:10:51 · 2952 阅读 · 0 评论 -
Java并发编程规则:synchronized-锁机制
前面说过的,即使是线程安全的类,也不一定就是线程安全的。当一个不变约束涉及多个变量时,变量间不是彼此独立的:某个变量的值会制约其他变量的值。因此更新一个变量的时候,要在同一原子操作中更新其他变量的值。为了保护状态的一致性,要在单一的原子操作中更新相互关联的状态变量。用锁来保护状态:对于每个可被多个线程访问的可变状态,如果所有访问它的线程在执行时都占有同一个锁,这种情况,我们称这个变原创 2016-12-08 14:17:59 · 1458 阅读 · 0 评论 -
Java并发编程规则:构建线程安全的共享对象
构建线程安全的共享对象,使其在多线程环境下能够提供安全的访问。编写正确的并发程序关键在于控制共享、可变的状态进行访问管理。synchornized关键字既可以阻塞程序,也可以维护操作的原子性,它是一个线程安全与非线程安全的临界区标识,通过它我们可以控制对象的内存可见性。不得不提到volatile,volatile仅仅是控制可见性,而同步性却不及synchornized。多线程访问共享变量的诡异原创 2016-12-09 18:02:56 · 892 阅读 · 0 评论 -
Java并发编程规则:构建封闭的线程限制
访问共享、可变的数据要求使用同步。一个可以避免同步的方式就是不提供共享数据。如果数据仅在单线程中访问,就不需要提供同步。线程封闭是实现线程安全的最简单的方式之一。当一个对象封闭在一个线程中时,这种做法会自动成为线程安全的,即使封闭的对象本身不是线程安全的。——《Java并发编程实践》代码级别的Ad-hoc线程限制:此种情况是,线程的维护任务全部落在实现上。通过可见性修饰符来控制目标对象原创 2016-12-12 16:55:25 · 901 阅读 · 0 评论 -
Java并发编程规则:不可变对象永远是线程安全的
创建后状态不能被修改的对象叫作不可变对象。不可变对象天生就是线程安全的。它们的常量(变量)是在构造函数中创建的,既然它们的状态无法被修改,那么这些常量永远不会被改变——不可变对象永远是线程安全的。不可变性的理解:无论是Java语言规范还是Java存储模型都没有对不可变性做出正式的定义。不可变性并不是将域简单地等于将对象的所有变量都声明为final类型,所有域都是final类型的对象仍然可以原创 2016-12-12 18:06:14 · 9434 阅读 · 7 评论 -
Java并发编程规则:设计线程安全的类
封装设计:尽管所有的状态都存储在公共静态变量(域)中,仍然能写出线程安全的程序,但比起那些适当封装的类来说,我们难以验证这种程序的线程安全性,也很难再修改它的同步不破坏它的线程安全性。在没有进行全局检查的情况下,封装能够保证线程的安全性。=====设计线程安全类的过程应该包括下面3个基本要素:========1、确定对象状态是由哪些变量组成的;2、确定限制状态变量的不变约束;原创 2016-12-13 17:20:25 · 1576 阅读 · 0 评论 -
Java并发编程规则:同步容器与并发容器
同步性和并发性都是线程安全的知识,只要同时满足条件就可以编写支持并发线程安全的程序。同步容器首先,同步容器是线程安全的。Java中设计了同步容器的数据结构对象,如:Vector和HashTable。但必须说明的是,同步容器在复合操作(迭代、运算、逻辑处理等)时如果没有线程同步策略,那么程序就不是线程安全的。Java定义Vector是线程安全的。但是在多线程环境下,多个线程进行remove、原创 2016-12-22 11:53:11 · 1726 阅读 · 0 评论