
线程同步机制
线程同步机制
李智文
如鹿渴望着水
展开
-
线程安全问题的概述
假设电影院卖票场景:一个窗口卖100张票,这是没有问题的------单线程多个窗口一起卖票,但是卖的票不同,这也是不会出现问题的------多线程程序,但没有访问共享数据多个窗口一起卖票,卖的票是一样的,这就会出现安全问题------多线程程序,可以访问共享数据...原创 2019-09-22 03:07:26 · 329 阅读 · 0 评论 -
线程安全问题的代码实现
多线程的安全问题在于多线程程序中可以访问共享数据.下面是模拟多线程可共享数据的安全问题代码:/* 实现卖票案例*/public class RunnableImpl implements Runnable{ // 定义一个多线程贡献的票源 private int ticket = 100; // 设置线程任务:卖票 @Override publi...原创 2019-09-22 03:52:20 · 383 阅读 · 0 评论 -
线程安全问题产生的原理
根据线程安全问题的代码实现,*一、关于卖出不存在的票这里有t0、t1和t2三个线程一起抢cpu的执行权,谁抢到谁就可以执行我们一步一步跟进这个结果:直接到产生问题的地方:假设程序运行了一会,我们的共享资源ticket字段执行到了1之后:1.t0线程抢到了cpu的执行权,进入到run方法中执行if语句,因为if中有sleep方法,所以失去了cpu的执行权进行睡眠.2.t2线程抢到了c...原创 2019-09-23 02:03:59 · 377 阅读 · 0 评论 -
解决线程安全问题:同步代码块
因出现线程安全问题,会出现不存在的数据以及重复的数据,解决线程安全问题的其中一种方案:使用同步代码块.格式:synchronized(锁对象){可能出现线程安全问题的代码(访问了共享数据的代码)}注意:1.同步代码块中的锁对象,可以使用任意的对象2.必须保证多个线程使用的锁对象是同一个3.锁对象的作用:把同步代码块锁住,只让一个线程在同步代码块中执行代码实现:运行后结果并未出...原创 2019-09-23 02:41:05 · 612 阅读 · 0 评论 -
同步技术的原理
同步技术的原理:使用一个锁对象,这个锁对象叫同步锁,也叫对象锁,也叫对象监视器.程序中我们创建三个线程(t0、t1、t2),这三个线程同时抢夺cpu的执行权,谁抢到了谁就执行cpu的run方法.1.t0抢到了cpu的执行权,执行run方法,而我们把同步代码块写在了run方法中,所以在执行run方法时会遇到synchronized代码块,这时t0会检查synchronized代码块是否有锁对...原创 2019-09-23 04:43:03 · 393 阅读 · 0 评论 -
解决线程安全问题:同步方法
解决线程安全问题第一种是:同步代码块第二种就是:同步方法定义:用synchronized修饰的方法就叫做同步方法,保证一个线程执行该方法的时候,其它线程只能在方法外等着.格式:修饰符 synchronized 返回值类型 方法名(参数列表){可能会产生线程安全问题的代码(访问了共享数据的代码)}代码实现:实现类:public class RunnableImpl implemen...原创 2019-10-02 10:54:24 · 288 阅读 · 0 评论 -
解决线程安全问题:Lock锁
解决线程安全问题第三种方案:Lock锁java.util.concurrent.locks.Lock 机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。Lock锁也称同步锁,加锁与释放锁方法化了,如下:public void lock() :加同步锁。public void ...原创 2019-10-05 10:04:34 · 558 阅读 · 0 评论