- 博客(11)
- 收藏
- 关注
原创 Java并发编程5 —— 并发脏读问题
两个线程同时修改共享数据容易产生线程安全问题。如果是在数据库中,一条数据由很多个字段组成,假设一个线程要去修改其中几个字段的值,与此同时有另一个线程想要读取这条数据,那么会产生什么问题呢。下面的代码中,Student类有学号id、姓名name、专业名dprt三个属性。某同学申请转专业,需要修改他的学号和专业名。修改学号和专业名需要1秒钟完成,同时有另一个线程在查他的信息,查询速度很快。i...
2018-09-16 20:57:44 1291 1
原创 Java并发编程4 —— 对象锁的同步和异步
同步和异步当访问共享资源时,我们为了保证线程安全,让每个线程在操作共享变量前读到的都是正确的值,必须同步地执行代码,即每个线程方法执行完毕后才能继续。而异步则不需要等待其他线程的方法执行完毕,可以立刻执行,这里不涉及对共享资源的操作。对象锁的同步和异步直接上代码吧。import static java.lang.Thread.sleep;public class Sync...
2018-09-15 21:03:05 1070
原创 Java并发编程3 —— 对象锁和类锁
synchronized关键字作用在同步代码块上,给共享变量“上锁”可以解决线程安全问题。这把“锁”可以作用在某个对象上,也可以作用在某个类上。举个栗子,有个自助银行,里面有两台ATM机,工作人员可以看到每次存取款之后机器里钞票的总金额数。现在有两个人来存钱,各存50元。没有锁在下面的代码中,两个线程t1、t2相当于两个人,每个Service对象相当于一台ATM机。这里先只创建了一个S...
2018-09-11 22:54:07 508
原创 Java并发编程2 —— synchronized关键字原理初探
线程安全问题的产生简单来说有两点,一是存在共享数据,二是存在多个线程同时操作共享数据。要解决这个问题,我们会想把处理共享数据的操作原子化,当一个线程在处理共享数据时,不允许其他线程同时处理它。换句话说,我们要把处理共享数据的这段逻辑“锁住”。去银行场景:俩人去银行,一个人存50块钱,另一个人取80块钱。银行一开始有一百块钱。public class Bank { pri...
2018-09-09 21:42:07 331
原创 Java并发编程1 —— 线程安全问题是如何产生的
前提在研究线程安全问题之前,有必要简单回顾一下jvm内存模型。如下图所示,jvm内存模型可分成两大部分,即主存区和jvm内存。主存区又叫做共享内存,顾名思义,是各个线程运行时所共享的内存区域,用来存放类加载时产生的对象实例,以及共享变量、静态变量、常量等。jvm内存为线程私有,即每个线程独享该内存,用来存放局部变量、方法信息等。当线程需要访问共享变量时,首先需要从共享内存中读取...
2018-09-02 17:35:21 847
原创 shell脚本入门
最近看了一个shell编程入门的视频课,随手记下一些基础的语法,根据笔记整理出这篇文章,仅供小白入门。 首先感谢这位东北小哥的视频课程,讲的贼6,传送门http://edu.51cto.com/course/6068.html?source=so,想学shell或想学东北话的同学不能错过。1. shell脚本的第一行 第一行一定是以 #! 开头,用来指定shell脚本解释器的路径,说...
2018-03-24 15:07:15 373
原创 Java集合——LinkedList
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.SerializableLinkedList是集合中除ArrayList之外的另一个List实现,其本质是双向链表,同时实现Deque、Cloneable、Seriali
2017-10-31 15:37:15 530
原创 Java集合——ArrayList
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializablejava.util.ArrayList,动态数组,实现了Java集合中List和Clonable接口。与普通数组相比,ArrayList具有以下优点:· 支持
2017-07-20 20:13:31 302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人