![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Bug君坤坤
(1)QQ 2975287472 阳光,积极向上的人;喜欢探索新技术,乐于分享心得;易于沟通,抗压力强,自学能力强<br>(2)具备一定英文阅读能力,可以阅读英文书籍以及帮助文档<br>(3)具有强烈的时间观念和交付意识,拥有良好的代码习惯,逻辑结构清晰<br>(4)有比较强的动手能力,擅长调试代码和硬件设备,有很好的分析问题与解决问题的能力<br>(5)具有较好的自学快速上手能力,心态逐渐平和,任务逻辑安排逐渐计划性,乐于学习新知识,及时总结BUG和知识
展开
-
高并发(一)
一、概念1、同步synchronous和异步asynchronous2、并发Concurrency和并行Parallelism3、临界区临界区用来表示一种公共资源或者是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程想要使用这个资源,就必须等待4、阻塞Blocking和非阻塞Non-Blocking(1)阻塞和非阻塞通常用来形容多线程间的相互影响(2)非阻塞允许多个线程同时进入临界区5、锁(Deadlock)、饥饿Starvation和活锁Liv原创 2020-05-21 20:43:36 · 222 阅读 · 0 评论 -
死锁与并发问题解决
死锁与并发问题解决一、死锁1、死锁的必要条件(1)互斥条件(2)请求和保持条件(3)不剥夺条件(4)环路等待条件2、最佳实践(1)使用本地变量(2)使用不可变类(3)最小化锁的作用范围:S=1/(1-a+a/n)(4)使用线程池的Executor,而不是直接new Thread执行(5)宁可使用同步也不要使用线程的wait和notify(6)使用BlockingQueue实现生产-消费模式(7)使用并发集合而不是加了锁的同步集合(8)使用Semaphore创建有界的访问(9)原创 2020-05-17 20:21:28 · 739 阅读 · 0 评论 -
同步容器与线程池
一、同步容器1、两类(1)ArrayList -> Vector,Stack(2)HashMap -> HashTable(key,value不能为null)(3)Collections.synchronizedXXX(List、Set、Map)二、并发容器J.U.C1、分类(1)ArrayList -> CopyOnWriteArrayList(2)HashSet、TreeSet -> CopyOnWriteArraySet、ConcurrentSkipListSe原创 2020-05-17 19:07:40 · 194 阅读 · 0 评论 -
对象中的并发问题
一、发布对象1、发布对象使一个对象能够被当前范围之外的代码所使用2、对象逸出一种错误的发布,当一个对象还没构造完成时,就使它被其他线程所见3、安全发布对象(1)在静态初始化函数中初始化一个对象引用(2)将对象的引用保存到volatile类型域或者AtomicReference对象中(3)将对象的引用保存到某个正确构造对象的final类型域中(4)将对象的引用保存到一个由锁保护的域中二、不可变对象1、不可变对象需要满足的条件(1)对象创建以后其状态就不能修改(2)对象所有域都是fin原创 2020-05-17 19:03:07 · 324 阅读 · 0 评论 -
并发编程与线程安全
并发编程与线程安全一、并发模拟1、Postman:HTTP请求模拟工具2、Apache Bench(AB):Apache附带的工具,测试网站性能3、JMeter:Apache组织开发的压力测试工具二、线程安全性1、定义当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类都能表现出正确的行为,那么就称这个类是线程安全的2、三种特性(1)原子性提供了互斥访问,同一时刻只能有一个线程原创 2020-05-17 18:55:49 · 130 阅读 · 0 评论 -
并发基础概念
一、发生情况计数情况1、200个线程累加500次会发生问题,数据累加不正确2、1个线程累加500次不会问题,数据累加争取二、基本概念1、并发同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或换出内存,这些线程是同时“存在”的。每个线程都处于执行过程的某个状态。如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行2、高并发High Concurrency是互联网分布式系统架构设计中必须考虑的因素之一,通常设计保证系统能够同时并行处理原创 2020-05-17 18:49:05 · 255 阅读 · 0 评论 -
并发及并发的线程安全处理
一、并发1、线程安全性原子性、可见性、有序性、atomic包、CAS算法synchorizes与Lock、volatile、happes-before2、安全发布对象安全发布方法、不可变对象、final关键字使用、不可变方法、线程不安全类与写法3、线程安全手段堆栈封闭、ThreadLocal线程封闭、JDBC的线程封闭、同步容器、并发容器、J.U.C4、AQS等J.U.C组件CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock与锁、Con原创 2020-05-17 18:44:56 · 163 阅读 · 0 评论 -
并发、死锁与同步
一、并发1、简介(1)两个并发的进程,其中一个进程对另一个进程的影响常常是不可预期的(2)两个并发进程执行的相对速度无法相互控制(3)进程执行的相对速度不能由进程自己来控制,还与进程调度策略有关(4)不确定性也是并发系统的一个特征二、死锁1、简介死锁指多个进程在运行过程中因争夺资源而造成的一种僵局2、出现死锁四个必要条件(1)资源互斥:一个资源只能被一个进程使用(2)请求与保...原创 2020-04-23 15:32:58 · 306 阅读 · 0 评论 -
进程与线程所占用的资源
1、进程中占有的资源(1)地址空间(2)全局变量(3)打开的文件(4)子进程(5)信号量(6)账户信息2、线程占有的资源(1)栈(2)寄存器(3)状态(4)程序计数器3、线程共享的内容(1)代码段code segment(2)数据段data section(3)进程打开的文件描述符(4)信号的处理器(5)进程的当前目录和(6)进程用户ID和进程组ID4、线程独...原创 2020-04-23 15:28:30 · 5722 阅读 · 0 评论 -
进程间的通信与异常
一、进程间通信1、管道(1)非命名管道只能用于父子进程通讯(2)命名管道FIFO,先进先出,只允许数据的单向流动,每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO(3)特点速度慢,容量有限2、消息队列(1)首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中读取数据。(2)消息队列是用创建文件的方式建立的(3)容量受到系统限制...原创 2020-04-23 15:24:37 · 426 阅读 · 0 评论 -
解析进程
解析进程一、进程1、三个状态(1)就绪态(2)执行态(3)阻塞态等待I/O、进程sleep、等待解锁等原因都会导致进程暂停2、三种状态的转换(1)就绪—>执行(2)执行—>阻塞(3)阻塞—>就绪3、时间片切换(1)当进程已经获得了除cpu外所有的资源----就绪态(2)当分配到时间片就成执行态,当时间片用完之前一直未进入阻塞态的话,进入就绪态(3)进程...原创 2020-04-21 17:32:49 · 117 阅读 · 0 评论 -
Servlet多线程并发问题
Servlet多线程并发问题1、servlet对象servlet对象在tomcat服务器是单实例多线程的2、相关变量(1)HttpServletRequest 请求对象:获取请求信息(2) HttpServletResponse 响应对象: 设置响应对象(3) ServletConfig对象: servlet配置对象(4) ServletContext对象: servlet的上...原创 2020-03-29 18:35:58 · 317 阅读 · 0 评论 -
Synchronized 关键字
Synchronized 关键字1、简介修饰方法时:该方法变为同步的,即:同一时间不可能有两个以上的线程访问该方法。2、应用当方法变为同步后,虽然解决了线程安全问题,但是随之带来了该方法执行效率相对低下的问题。为了兼顾安全与效率,我们可以缩小同步范围。解决的办法是:使用同步块Synchronized(同步监视器){ 需要同步的代码片段}...原创 2020-03-26 17:53:26 · 108 阅读 · 0 评论 -
并发小知识
并发小知识1、简介java的优势之一,处理线程比较简单。对于操作系统而言,同时运行着多个任务,每一个任务相当于一个应用程序,这些任务成为进程。对于一个程序而言,又需要同时运行多个任务,每一个任务就是一个线程。2、并发多线程实际上是走走停停的。操作系统将cpu的运行时间划分为若干个时间片段,并将这些片段尽可能的均匀分配给每一个线程,使其有机会被cpu运行。而当cpu运行一个线程时,其他线...原创 2020-03-26 17:50:57 · 86 阅读 · 0 评论 -
线程知识小集合
线程知识小集合21、停止线程:stop方法已经过时,如何停止线程?停止线程的方法只有一种,就是run方法结束。如何让run方法结束呢?开启多线程运行,运行代码通常是循环体,只要控制住循环,就可以让run方法结束,也就是结束线程。 特殊情况:当线程属于冻结状态,就不会读取循环控制标记,则线程就不会结束。 为解决该特殊情况,可引入Thread类中的Interrupt方法结束线程的冻结状态;...原创 2020-03-15 21:47:32 · 78 阅读 · 0 评论 -
java中的线程
java中的线程一、基本认识1、简介线程是程序运行的基本单位。进程是由线程不断快速切换得到。线程Thread是具有一定顺序的指令序列、存放方法中定义局部变量的栈和一些共享数据。2、创建线程(1)创建一个新的线程类,继承Thread并且重写run方法 public xxx extends Thread{ public void run(){ } }Thread x=new ...原创 2020-02-24 15:34:12 · 172 阅读 · 0 评论