Java 多线程
Java 多线程
陈彬_smile
待到山花烂漫时,她在丛中笑。
展开
-
Java高并发程序设计(一)基础前言
1.为什么需要并行1.1 基于业务要求,比如在用户上传图片的功能,可以用异步线程来做。然后用户可以继续使用app(或网站)的其他功能,不需要因为上传图片就阻塞了其他功能,影响用户体验。1.2 性能要求,比如一个分享商品图片给好友的功能,需要三个步骤,1合成图片(商品图片+用户头像+商品价格),2获取用户信息,3获取商品库存信息。这时候由于1合成图片是个耗时操作,我们可以开一个新线程来独立完...原创 2019-08-25 14:18:22 · 117 阅读 · 0 评论 -
Java高并发程序设计(二)Java并行程序基础
1.什么是线程线程是进程内的执行单元。一个进程内可以有多个线程同时在执行。线程的状态:新建(NEW),可运行(RUNNABLE),运行(RUNNING),阻塞(BLOCKED),死亡(DEAD)1.1新建(NEW):新创建了一个线程对象。1.2可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等...原创 2019-08-25 18:59:38 · 473 阅读 · 0 评论 -
Java高并发程序设计(三)Java内存模型和线程安全
1.原子性原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰。2.有序性在并发时,程序的执行可能就会出现乱序。(所以共享数据要做并发控制)3.可见性可见性是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。package com.thread.chapter03;/** * 变量的可见性 ...原创 2019-08-26 11:05:06 · 114 阅读 · 0 评论 -
Java高并发程序设计(四)无锁
1. 无锁类的原理详解1.1. CASCAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成操作。当多个线程同时使用CAS操作一...原创 2019-08-26 11:58:05 · 179 阅读 · 0 评论 -
Java高并发程序设计(五)JDK并发包1
1. 各种同步控制工具的使用1.1. ReentrantLock可重入:单线程可以重复进入,但要重复退出。可中断:lockInterruptibly()。可限时:超时不能获得锁,就返回false,不会永久等待构成死锁公平锁:先来先得public ReentrantLock(boolean fair)public static ReentrantLock fairLock = n...原创 2019-08-27 11:38:20 · 179 阅读 · 0 评论 -
Java高并发程序设计(六)JDK并发包2
1. 线程池的基本使用1.1. 为什么需要线程池a.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。创建和销毁线程也需要时间,如果创建和销毁的时间远大于线程执行的时间,反而得不偿失。b.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。...原创 2019-08-27 16:52:28 · 338 阅读 · 0 评论 -
Java高并发程序设计(七)并发设计模式
1.什么是设计模式在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。《设计模式:可复用面向对象软件的基础》 收录 23种模式工厂...原创 2019-08-28 10:41:37 · 372 阅读 · 0 评论 -
Java高并发程序设计(八)锁的优化和注意事项
1.锁优化的思路和方法减少锁持有时间方法一,方法二的区别:方法二对锁持有时间比价短,因为在操作共享数据时才需要加锁;而ohtercode1(),othercode2()方法并不涉及对共享数据的操作,所以不需要阻塞其它线程。减小锁粒度将大对象,拆成小对象,大大增加并行度,降低锁竞争。偏向锁,轻量级锁成功率提高。HashMap的同步实现– Collections.synchr...原创 2019-08-28 17:27:49 · 329 阅读 · 0 评论 -
Java高并发程序设计(九)并发调试和JDK8新特性
1.多线程调试的方法如下代码存在安全问题,在多个线程操作时会出现数据越界异常。package com.thread.chapter09;import java.util.ArrayList;/** * t1,t2同时对 arrayList进行操作,会出现脏读,脏写 * 数组越界异常是因为 size在被扩容之前,比如 t1,t2都 * 读到了size = 9;然后都认为可以继...原创 2019-08-29 14:08:08 · 203 阅读 · 0 评论
分享