-
Notifications
You must be signed in to change notification settings - Fork 1
weixiding/thread
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Latest commit | ||||
Repository files navigation
该工程演示满足高并发的常用设计模式 1 高并发下的单例设计模式 饿汉式 懒汉式 满足高并发的懒汉式 满足高并发并且效率较高的懒汉式 结合类加载特点的懒汉式 枚举方式 2 Observable使用枚举定义生命周期,并声明接口public Cycle getCycle()获取生命周期 Task 我们要运行的核心任务接口 TaskLifecycle 生命周期函数,来执行我们特定生命周期所需要执行的操作 ObservableThread 一个完整的 带有监控的线程 3 Single Thread execution 引入的问题:访问公共资源时,所引起的并发问题,以及解决并发问题使用synchronized所导致的死锁问题 并举了连个问题,吃饭问题,并提出了两个解决思路:使用TableWarePair 封装需要获取的资源,作为锁的对象. 4 读写锁 读写锁 实现思路:我们通过ReadWriteLockImpl类为信息传递的媒介,来判断当前有多少read的线程,多少写的线程,多少等待写的 线程。 当我们的读线程执行到加锁函数时,先使用readWriteLock.getMUTEX(),然后通过条件判断是否等待(是否有写线程) 如果不等待就执行下一步相关操作 读同理 Lock 锁的基本接口 ReadWriteLock 数据交换中心的基本接口 ReadWriteLockImpl 数据交换中心的实现类 ShareDate 使用读写锁实现的共享数据 WriteLock 写锁 ReadLock 读锁 当然了我们写的优化肯定是不够的,仅仅当做练习而已! 5 不可变对象 并发问题的出现,归根结底还是因为我们进行了共享资源的修改,解决的办法是使用串行化,但是这样做的话会成为性能的瓶颈, 那么我们就需要定义一个不可变对象,进行强制约束,类似于String 每次都返回一个新的对象。那么就不用串行化了。 6 future设计模式 简单讲解,类似于我们去庆丰包子铺,我们去前台要东西,支付完成后给我们一张小票,就可以坐着而不用站着等了,我们可以 等待前台叫号然后凭借小票去领美食,或者主动上前询问美食是否做好了,然后凭借小票认领美食。 Future 相当于前台给我们的小票,我们拿着它就可以去获取美食了 FutureService 相当于前台,获取我们的需求,交给厨房去做,给我们一张小票,让我们可以更惬意的等待 Task 我们的点菜内容 问题的提出: 当然这里面还是存在问题的,如果我们使用有返回值的话,我们调用get方法还是会等待的。 解决办法 就是在FutureService.submit中在传递一个回调接口,这样就不用在等待了。 7 线程上下文 如spring的context,需要注意的是,这并不是共享变量,因为每个线程都拥有属于他自己的变量 8 Balking设计模式 解决的问题:某个线程因为发现其他线程正在进行相同的工作而放弃即将开始的任务。注意是相同的工作哦~~! 9 自定义线程池 首先说一说一个线程池应该具备哪些东西 1 初始化线程个数 2 核心线程个数 3 最大线程个数 4 维护线程池中线程数量,当线程空闲数多时尽心线程的回收,当线程紧张时进行线程的创建 5 任务添加策略 6 任务队列 7 线程的构造工厂 我们有这些基本就算是够了. DenyPolicy 执行策略 RunnableQueue 任务队列 ThreadFactory 构造线程的工厂 ThreadPool 线程池
About
thread中的常用设计模式
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published