线程共享数据的安全问题
2021-07-12 19:06
标签:线程共享数据 现在 来讲 bsp str 例子 监视器 导致 自己 加同步代码:加了同步代码后,线程进同步判断锁,获取锁,出同步释放锁,导致了线程运行速度的下降 方式一:同步代码块 解决线程安全问题,java程序提供了线程同步技术 synchronized(任意对象){ 线程要操作的共享数据 } 任意对象:通俗来讲叫同步锁或者对象监视器 同步的作用:保证线程的安全性,没有锁的线程是不能执行的,只能等待带锁的线程执行完拿到同步锁才能进入同步代码块中执行。 举个例子: 现在有3个线程需要进入代码块中执行,当 线程1 遇到synchronized以后,线程1 会去判断同步锁还有没有,同步锁如果有,线程1把锁带走进入同步代码块中执行操作,执行完以后,线程1 离开同步代码块,就把锁还回去了(释放锁)。 假如线程1进入同步代码块中的时候睡着了,此时 线程2 执行了,但是 线程2 在遇到 synchronized 时,去判断同步锁还在不在,此时的同步锁在线程1手上,线程2 拿不到同步锁,没有进入同步代码块的钥匙了,就不能进去同步中执行,被阻挡在同步代码块的外面,只有等 线程1 醒过来把同步锁还给 synchronized 了,此时 线程2 才有机会拿到钥匙(=锁)进入同步代码块中执行操作。 ------------------------------------------------------------------------------------------- --------------------------------------------- 方法二:同步方法 1.非静态方法 采用同步方法形式,解决线程安全问题。 好处:代码简洁 用法:将线程共享数据,抽取到一个方法中,在方法的声明上加入同步关键字 synchronized 同步方法中的对象锁是本类的对象引用 this。 2.静态方法 静态方法也有同步锁,同步锁是本类自己.class ---------------------------------------------------------------------------------------------------------------- 线程共享数据的安全问题 标签:线程共享数据 现在 来讲 bsp str 例子 监视器 导致 自己 原文地址:https://www.cnblogs.com/chenwei-blog/p/9545396.html
上一篇:【线程休眠】
下一篇:Python基础第三课