多线程
qq_26676207
这个作者很懒,什么都没留下…
展开
-
(一)多线程快速入门
多线程快速入门学习目标有明确的学习目标,学起来会更有趣哦:线程与进程为什么要使用多线程?多线程应用场景多线程创建方式练习题线程生命周期面试总结一、线程与进程线程与进程的区别1、每个正在系统上运行的程序都是一个进程。 2、每个进程包含一到多个线程。 3、线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。 4、所以线程基本上是轻量级的进程,它负责在单个...转载 2018-06-28 14:30:09 · 193 阅读 · 0 评论 -
多线程系列三:Lock和Condition
有了synchronized为什么还要Lock?因为Lock和synchronized比较有如下优点1、 尝试非阻塞地获取锁2、 获取锁的过程可以被中断3、 超时获取锁Lock的标准用法 1 package com.lgs; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurr...转载 2018-07-19 10:26:17 · 420 阅读 · 0 评论 -
多线程系列四:AQS-AbstractQueuedSynchronizer
什么是AbstractQueuedSynchronizer?为什么我们要分析它? AQS:抽象队列同步器,原理是:当多个线程去获取锁的时候,如果获取锁失败了,当前线程就会被打包成一个node节点放入同步队列里面使用LockSuport的park方法阻塞起来,如果有线程释放了锁,放入同步队列的线程就会被LockSupport的unpark方法唤醒再次去获取锁,如果获取锁又失败了就再次打包成nod...转载 2018-07-19 10:25:23 · 125 阅读 · 0 评论 -
多线程系列五:并发工具类和并发容器
一、并发容器1.ConcurrentHashMap为什么要使用ConcurrentHashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取En...转载 2018-07-19 10:22:24 · 306 阅读 · 0 评论 -
多线程系列六:线程池
一. 线程池简介1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。2. 使用线程池的好处a) 降低资源的消耗。使用线程池不用频繁的创建线程和销毁线程b) 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池空闲的时候可以去执行T1和T2,从而提高响应c) 提高线程的可管理性。使用线程池可以很好地提高性能,线程池在系统启动...转载 2018-07-19 10:19:20 · 321 阅读 · 0 评论 -
(九)java线程池详解
java线程池详解一、什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。 在开发过程中,合理地使用线程池能够带来3个好处: 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅...转载 2018-06-28 16:06:25 · 144 阅读 · 0 评论 -
(八)java并发队列
Java并发队列在并发队列上JDK提供了两套实现: 一个是以ConcurrentLinkedQueue为代表的高性能队列; 一个是以BlockingQueue接口为代表的阻塞队列; 无论哪种都继承自Queue。 一、ConcurrentLinkedQueue定义ConcurrentLinkedQueue : 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常Concu...转载 2018-06-28 15:58:51 · 16199 阅读 · 0 评论 -
(七)java并发包
Java并发包同步容器类一、Vector与ArrayList区别1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。 数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,...转载 2018-06-28 15:34:23 · 237 阅读 · 0 评论 -
(六)如何停止线程?
如何停止线程?一、停止线程思路1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 2、使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。 3、使用interrupt方法中断线程。二、代码示例1. 使用退出标志终止线程当run方法执行完后,线程就会退出。 但有时run方法是永远不会结束的。如在服务端程序中使...转载 2018-06-28 15:18:45 · 162 阅读 · 0 评论 -
(五)Lock锁的用法||Lock锁与 synchronized 关键字的区别
Lock锁的用法Lock锁机制与 synchronized 关键字的区别一、Lock锁的用法Lock lock = new ReentrantLock(); lock.lock(); try{ //可能会出现线程安全的操作 }finally{ //一定在finally中释放锁 //也不能把获取锁在try中进行,因为有可能在获取锁的时候抛出异常 lock.unlock(); }二、Lock锁机制与 ...转载 2018-06-28 15:09:45 · 486 阅读 · 1 评论 -
(四)wait()、notify()、notifyAll()方法||wait()与sleep()的区别
wait()、notify()、notifyAll()方法wait()与sleep()的区别一、wait()、notify()、notifyAll()方法方法介绍wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。 如果对象调用了wait方法就会...转载 2018-06-28 14:58:02 · 152 阅读 · 0 评论 -
(三)多线程之间实现通讯
多线程之间实现通讯多线程之间如何实现通讯什么是多线程之间通讯?多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。多线程之间通讯需求案例:第一个线程写入(input)用户,另一个线程取读取(out)用户;实现读一个,写一个操作。 代码实战:共享资源源实体类/** 共享资源源实体类 */class UserInfo { public String userSex; ...转载 2018-06-28 14:52:13 · 190 阅读 · 0 评论 -
(二)多线程之间实现同步
多线程之间实现同步学习目标有明确的学习目标,学起来会更有趣哦:理解线程安全synchronized用法死锁多线程创建方式练习题线程生命周期面试总结一、什么是线程安全?为什么有线程安全问题?当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。 但是做读操作是不会发生数据冲突问题。案例:需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模...转载 2018-06-28 14:46:14 · 197 阅读 · 0 评论 -
多线程系列一:线程基础
概念什么是线程:运行程序会创建一个进程。进程里面包含多个线程,OS调度的最小单元是线程(轻量级进程)。运行一个普通的java程序包含的线程: 1 package com.lgstudy; 2 3 import java.lang.management.ManagementFactory; 4 import java.lang.management.ThreadInfo; 5...转载 2018-07-20 09:45:37 · 277 阅读 · 0 评论