多线程
文章平均质量分 57
扎瓦菜鸟
这个作者很懒,什么都没留下…
展开
-
Java并发编程1 —— 线程安全问题是如何产生的
前提在研究线程安全问题之前,有必要简单回顾一下jvm内存模型。如下图所示,jvm内存模型可分成两大部分,即主存区和jvm内存。主存区又叫做共享内存,顾名思义,是各个线程运行时所共享的内存区域,用来存放类加载时产生的对象实例,以及共享变量、静态变量、常量等。jvm内存为线程私有,即每个线程独享该内存,用来存放局部变量、方法信息等。当线程需要访问共享变量时,首先需要从共享内存中读取...原创 2018-09-02 17:35:21 · 842 阅读 · 0 评论 -
Java并发编程3 —— 对象锁和类锁
synchronized关键字作用在同步代码块上,给共享变量“上锁”可以解决线程安全问题。这把“锁”可以作用在某个对象上,也可以作用在某个类上。举个栗子,有个自助银行,里面有两台ATM机,工作人员可以看到每次存取款之后机器里钞票的总金额数。现在有两个人来存钱,各存50元。没有锁在下面的代码中,两个线程t1、t2相当于两个人,每个Service对象相当于一台ATM机。这里先只创建了一个S...原创 2018-09-11 22:54:07 · 498 阅读 · 0 评论 -
Java并发编程2 —— synchronized关键字原理初探
线程安全问题的产生简单来说有两点,一是存在共享数据,二是存在多个线程同时操作共享数据。要解决这个问题,我们会想把处理共享数据的操作原子化,当一个线程在处理共享数据时,不允许其他线程同时处理它。换句话说,我们要把处理共享数据的这段逻辑“锁住”。去银行场景:俩人去银行,一个人存50块钱,另一个人取80块钱。银行一开始有一百块钱。public class Bank { pri...原创 2018-09-09 21:42:07 · 322 阅读 · 0 评论 -
Java并发编程4 —— 对象锁的同步和异步
同步和异步当访问共享资源时,我们为了保证线程安全,让每个线程在操作共享变量前读到的都是正确的值,必须同步地执行代码,即每个线程方法执行完毕后才能继续。而异步则不需要等待其他线程的方法执行完毕,可以立刻执行,这里不涉及对共享资源的操作。对象锁的同步和异步直接上代码吧。import static java.lang.Thread.sleep;public class Sync...原创 2018-09-15 21:03:05 · 1064 阅读 · 0 评论 -
Java并发编程5 —— 并发脏读问题
两个线程同时修改共享数据容易产生线程安全问题。如果是在数据库中,一条数据由很多个字段组成,假设一个线程要去修改其中几个字段的值,与此同时有另一个线程想要读取这条数据,那么会产生什么问题呢。下面的代码中,Student类有学号id、姓名name、专业名dprt三个属性。某同学申请转专业,需要修改他的学号和专业名。修改学号和专业名需要1秒钟完成,同时有另一个线程在查他的信息,查询速度很快。i...原创 2018-09-16 20:57:44 · 1284 阅读 · 1 评论