
学习随笔--多线程并发
文章平均质量分 80
--知行合一
这个作者很懒,什么都没留下…
展开
-
传统线程技术和定时器的应用
创建线程的两种传统方式代码package thread;public class TraditionalThread { public static void main(String[] args) { // 第一种 继承 Thread类 Thread thread = new Thread() { @Override public void run() {原创 2017-08-03 15:56:28 · 328 阅读 · 0 评论 -
手写数据库连接池
概述不使用连接池的缺点:tcp连接三次握手消耗时间消耗内存严重使用池化思想, 达到连接的可复用, 节省时间和资源代码连接池接口package jdbcPool;public interface IPool { //返回我们自己封装的连接对象 PooledConnection getConnection(); void createConnections(int coun原创 2017-09-06 11:39:49 · 719 阅读 · 0 评论 -
阻塞队列ArrayBlockingQueue
队列包含固定长度队列和不固定长度队列ArrayBlockingQueue固定长度的阻塞队列 只有put()和take()方法才具有阻塞功能原创 2017-08-23 15:22:29 · 212 阅读 · 0 评论 -
Exchanger
用于实现两个人(线程)之间的数据交换, 每个人(线程)在完成一定的事务后想与对方交换数据, 第一个先拿出数据的人(线程)将一直等待第二个人(线程)拿着数据到来时, 才能交换数据, 例如毒品交易—哈哈原创 2017-08-23 14:51:41 · 182 阅读 · 0 评论 -
CyclicBarrier和CountDownLatch
CyclicBarrierCyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。CyclicBarrier就象它名字的意思一样,可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍。CyclicBarrier初始时还可带一个Runnable的参数,此Run原创 2017-08-22 18:59:45 · 190 阅读 · 0 评论 -
Semaphore实现信号灯
Semaphore可以维护当前访问自身的线程个数, 并提供了同步机制. 使用Semaphore可以控制同时访问资源的线程个数, 例如实现一个文件允许的并发访问数Semaphore实现的功能就类似厕所有5个坑, 假如有设个人要上厕所, 那么同时能有多少个人去上厕所呢? 同时只能有5个人能够占用, 当5个人中的任何一个人离开后, 其中在等待的另外五个人中又有一个可以占用了. 另外等待的5个人中可原创 2017-08-22 17:01:57 · 259 阅读 · 0 评论 -
Lock&Condition实现线程同步通信
Lock比传统线程模型中的synchronized方式更加面向对象, 与生活中的锁类似, 锁本身应该是一个对象. 两个线程执行的代码片段要实现同步互斥的效果, 谈么必须用一个Lock对象.锁是在代表要操作的资源的类的内部方法中, 而不是线程代码中!ReentrantLock(重入锁)在需要进行同步的代码部分加上锁,但不要忘记最后一定要释放锁,不然会造成锁永远无法释放,其它线程永远进原创 2017-08-04 18:41:37 · 313 阅读 · 0 评论 -
Callable和Future的应用
Future取得的结果类型和Callable返回的结果类型必须一致, 这是通过泛型来实现的Callable要采用ExecutorService的submit方法提交, 返回的future对象可以取消任务代码package mutithread.threadpool;import java.util.concurrent.Callable;import java.util.co原创 2017-08-04 17:38:28 · 254 阅读 · 0 评论 -
线程的互斥与同步通信
synchronized的使用和wait与notify实现线程间的通信案例: 子线程循环10次, 主线程循环5次, 两者交替运行50次代码package thread;public class TraditionalThreadCommunication { public static void main(String[] args) { final Bussine原创 2017-08-03 18:22:38 · 237 阅读 · 0 评论 -
多个线程访问共享对象和数据的方式
如果每个线程执行的代码相同, 可以使用同一个Runnable对象, 这个Runnable对象中有那个共享数据, 例如:卖票系统(只考虑卖出)如果每个线程执行的代码不同, 这时候需要用不同的Runnable对象, 有如下两种方式来实现这些Runnable对象之间的共享数据:(1) 将共享数据封装在另外一个对象中, 然后这个对象逐一传递给各个Runnable对象. 每个线程对共享数据的操作方法原创 2017-08-04 14:07:08 · 282 阅读 · 0 评论 -
线程池
线程池的概念与Executors类的应用创建固定大小的线程池创建缓存线程池创建单一线程池(线程死掉会重新启动)代码package mutithread.threadpool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class T原创 2017-08-04 16:45:36 · 295 阅读 · 1 评论 -
ThreadLocal实现线程范围的共享变量
线程范围内共享数据的示意图ThreadLocal的作用和目的: 用于实现线程内的数据共享, 即对于相同的程序代码, 多个模块在同一线程中运行时要共享一份数据, 而在另外线程中运行时又共享另外一份数据每个线程调用全局ThreadLocal对象的set方法, 就相当于往其内部的map中增加一条记录, key分别是各自的线程, value是各自的set方法传递进去的值. 在线程结原创 2017-08-04 09:56:48 · 299 阅读 · 0 评论 -
秒杀---使用乐观锁实现或cache实现
概念秒杀系统的特点新品上市 价格低廉市场造势 大幅推广指定时间开售瞬时售空读多写少秒杀系统难点高并发、负载压力大竞争资源是有限的对其他业务的影响提防“黄牛党”秒杀系统应用场景商品抢购群红包优惠卷领取抢火车票在线预约技术维度对秒杀系统的分析 —— 架构原则技术维度对秒杀系统的分析 —— 优化技术业务维度对秒杀系统的分析 修改库存放在订单支付的前面位置 体现了企业的良原创 2017-09-12 13:58:16 · 4953 阅读 · 0 评论