多线程
pois
这个作者很懒,什么都没留下…
展开
-
由一个多线程共享Integer类变量问题引起的。。。
假设并发环境下,业务代码中存在一些统计操作,为了保证线程安全,开发人员往往会对计数值进行加锁(synchronized),值得注意的是,直接对Integer类型进行加锁,似乎并不会达到预期效果,比如下面这段代码:Integer num = new Integer(0);public void test() throws InterruptedException {f转载 2018-01-11 09:26:30 · 762 阅读 · 1 评论 -
一次redis悲观锁 实现 微信jssdk token缓存
(一)背景:1 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token,且每天有额度配额,最大调用次数限制这一条决定:必须将access_token 缓存起来,否则每天都超标返回null2 正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。这一条决定:(1)我们应将access_token 缓存7...原创 2018-03-03 19:44:44 · 1806 阅读 · 1 评论 -
深入分析 ThreadLocal 内存泄漏问题
http://blog.csdn.net/wudiyong22/article/details/52141608这篇文章看下来是对ThreadLocal内存泄漏问题解释的最清楚的,也是最佳使用实践指导ThreadLocal引用对象存在两处:ThreadLocal tl = new ThreadLocal; ThreadMapThreadMap跟着Thread,Thread如果在线程池中,则不会...转载 2018-03-14 10:34:09 · 224 阅读 · 0 评论 -
ThreadLocal为什么要设计成private static
https://www.zhihu.com/question/35250439结论:1 static 防止无意义多实例2 当static时,ThreadLocal ref生命延长-ThreadMap的key在线程生命期内始终有值-ThreadMap的value在线程生命期内不释放——故线程池下,static修饰TrheadLocal引用,必须(1)remove 或(2)手动 ThreadLo...转载 2018-03-14 11:00:30 · 17046 阅读 · 1 评论 -
解惑如何保证数组元素的可见性
https://mp.weixin.qq.com/s?__biz=MzIwMzY1OTU1NQ==&mid=2247484057&idx=1&sn=c5fb63c68203001fa3a0545cef6c0e06&chksm=96cd42d5a1bacbc325759048d6149d49f8c918d8201026fbb1388e1b8f5247d5a147a9e...转载 2018-04-05 17:09:46 · 628 阅读 · 1 评论 -
讨论 update A set number=number+ ? where id=?的原子性 (含数据库原理)
结论:1. 本句本身具有原子性2. 当前读(包含update等写入操作)锁定数据,直到事务提交https://www.zhihu.com/question/46733729/answer/128582074阿里的mysql大咖给出了肯定的答案比如,表名A,字段名为 number,如下的SQL语句:语句1:update A set number=number+ 5 where id=1;语句2...转载 2018-02-08 23:36:54 · 17169 阅读 · 0 评论 -
库存问题锁的思考
4.18,此前犯了一些错误,红色批注指正库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。从技术方面剖析,很多人肯定会想到事务,但是事务是控制库存超卖的必...原创 2017-10-20 23:03:44 · 2281 阅读 · 0 评论 -
转账业务场景
A转给B100元两个关键点:1 A B sql在一个事务中2 A转账前,先查余额开启事务lined = update set A.money = A.money-100 where A.money >= 100if(lined == 0) return 没钱update set B.money = B.money+100提交事务看下这段代码是否有并发隐患根据https://blog.c...原创 2018-04-18 13:14:00 · 551 阅读 · 0 评论 -
线程的异常捕获与线程池的异常捕获 execute与submit区别
https://www.cnblogs.com/wscit/p/6100476.html#(单线程情况)对于单线程来说,只需要重写UncaughtException就好了,如下:123456789/** * Author: scw * Time: 16-11-24 */public class RewriteUncatchtExceptionHandler implements Thread.Un...转载 2018-04-20 23:02:58 · 4388 阅读 · 0 评论 -
Java死锁的排查
https://blog.csdn.net/sidihuo/article/details/52474227先弄个死锁的代码例子:[java] view plain copypublic class DeadLock implements Runnable { private int flag转载 2018-05-05 14:52:02 · 346 阅读 · 0 评论 -
分布式线程安全(redis、zookeeper、数据库)
https://blog.csdn.net/u010963948/article/details/79006572Q:一个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费synchronizedlockdb lockQ:两个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费分布式锁转载 2018-05-05 15:29:11 · 10082 阅读 · 2 评论 -
建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C
http://www.cnblogs.com/x_wukong/p/4009709.html在原文的基础上,加入退出程序功能package Thread;/** * Created by sunyuming on 18/5/5. * 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C, * 要求线程同时运行,交替打印10次ABC。这个问题用Objec转载 2018-05-06 00:00:53 · 2047 阅读 · 0 评论 -
notify 和 notifyAll 的区别
(一)先看一个 notify发生死锁的例子:http://blog.csdn.net/tayanxunhua/article/details/20998449(本文虽是转载,不过也加入了一些个人观点)JVM多个线程间的通信是通过 线程的锁、条件语句、以及wait()、notify()/notifyAll组成。下面来实现一个启用多个线程来循环的输出两个不同的语句:package com.tyxh.b...转载 2018-02-05 15:38:35 · 197 阅读 · 0 评论 -
HttpClient 4.x 多线程
背景:日志报错:参考:(一)HttpClient4.X Invalid use of SingleClientConnManager: connection still allocated项目用到了httpclient4.1开发。在多线程的情况下,异常报 Invalid use of SingleClientConnManager: connection still allocated 从国外的一...转载 2018-02-28 11:24:40 · 364 阅读 · 0 评论 -
子线程异常抛出 及 主线程事务回滚
http://blog.csdn.net/mynameismt/article/details/51363120多线程与事务回滚业务模型期望的结果是这样的,检测子线程的异常情况,如果发生异常,主线程回滚,否则提交大家都知道runnable有以下特点: 1.业务处理出现checked exception必须在线程中捕获处理不允许抛出,否则影响run函数的覆盖; 2...转载 2018-02-26 23:24:34 · 6804 阅读 · 0 评论 -
Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看转载 2017-10-21 16:40:17 · 237 阅读 · 0 评论 -
Java中Runnable和Thread以及Callable的区别
http://blog.csdn.net/huang211630/article/details/45640071 在java中,其实java中实现 多线程有三种方法,一种是继承Thread类;第二种是实现Runnable接口;第三种是实现Callable接口。1,继承Thread Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了...转载 2017-10-20 13:19:24 · 461 阅读 · 0 评论 -
40个Java多线程问题总结 (yet)
https://www.cnblogs.com/xrq730/p/5060921.html40个问题汇总1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这转载 2018-02-02 08:42:10 · 277 阅读 · 0 评论 -
假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
1 callable和futurehttp://blog.csdn.net/zy_281870667/article/details/72047325一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。pu转载 2018-02-02 08:58:38 · 3401 阅读 · 1 评论 -
一种Furture模式处理请求中循环独立的任务的方法
业务中经常碰到查询一个list后又需要对list进行后续处理(在sql层面不方便处理),需要循环遍历list如果list中各item的业务独立,可用future模式来大大提高性能1.关于future模式的概念参考:彻底理解Java的Future模式 https://www.cnblogs.com/cz123/p/7693064.html先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材。网...原创 2018-01-11 10:58:55 · 515 阅读 · 0 评论 -
countDownLatch和CyclicBarrier应用区别
讨论 在同时开始 和 等待结束一起 两者的实现区别countDown:http://blog.csdn.net/gaolu/article/details/46224821这个例子非常好[java] view plain copyclass SubRunnable implements Runnable转载 2018-02-02 10:14:07 · 207 阅读 · 0 评论 -
JAVA并发-从缓存一致性说volatile 讲的很好
http://blog.csdn.net/yizhenn/article/details/52384477学过计算机组成原理的一定知道,为了解决内存速度跟不上CPU速度这个问题,在CPU的设计中加入了缓存机制,缓存的速度介于CPU和主存之间。在进行运算的时候,CPU将需要的数据映射一份在缓存中,然后直接操作位于缓存中的数据,操作完毕后再将缓存中的数据写回到主存。这在单线程环境中转载 2017-07-03 16:25:01 · 1174 阅读 · 0 评论 -
wait 和 oject.wait 区别
http://blog.csdn.net/genww/article/details/6096232synchronized(obj){ obj.wait()和 wait()不同,前者释放锁,后者虽然也是释放锁,但却不是释放的obj对象的锁,而是this对象的锁,this对象!=obj对象,不在同步块中,哪来的锁呢,所以会报错}转载 2018-01-12 13:03:07 · 220 阅读 · 0 评论 -
轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
http://blog.csdn.net/yanyan19880509/article/details/52435135前言前面介绍了java中排它锁,共享锁的底层实现机制,本篇再进一步,学习非常有用的读写锁。鉴于读写锁比其他的锁要复杂,不想堆一大波的文字,本篇会试图图解式说明,把读写锁的机制用另外一种方式阐述,鉴于本人水平有限,如果哪里有误,请不吝赐教转载 2018-02-05 14:55:35 · 122 阅读 · 0 评论 -
Java并发编程:volatile关键字解析[volatile最好的文章]
https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247484857&idx=1&sn=80086fcbf00cb847f152d533d654b46f&chksm=ebd63a95dca1b383fbb3aa78ddb65df030620b4f641d54ca867713fad6c232f75339d1a80aa8&mpshare=1&转载 2018-02-05 22:59:26 · 227 阅读 · 0 评论 -
一次子线程事务回滚实践笔记-编程式事务
(一)问题的引出、主要解决手段在线程中使用 batchupdate ,中的每一条记录都会自动的commit(但仍使用一个数据库连接会话,有点像hibernate一级缓存的概念,多个事务,一个会话),如果有异常,则只有异常的数据执行失败,其他数据不会rollback,并且后续的数据可以继续执行业务中这样导致多线程任务异常数据的捕捉十分不易,必须使batchupdate批次有一个失败,就全部失败,然后...原创 2018-02-26 23:24:24 · 2590 阅读 · 3 评论 -
线程池汇总
https://mp.weixin.qq.com/s?__biz=MzUxOTc4NjEyMw==&mid=2247483659&idx=1&sn=44c8620b89bdd7faff0faa928223f70c&chksm=f9f51aefce8293f994722db144d914019a9d0824bb8d84ce8222493ac6b8ad1afb8ee70...原创 2018-04-28 23:29:37 · 663 阅读 · 0 评论