多线程part6-线程安全

同步代码块解决线程安全问题

当多个线程操作同一数据时会出现问题

会出现多次相同,会超过范围

线程执行代码时,cpu执行权随时有可能被其他线程抢走

所以我们需要把操作共享数据的代码锁起来

需要一个关键字 Synchronized(锁对象){执行代码}

特点一:锁状态默认打开,但一个线程进去了,锁自动关闭

特点二:当里面的代码全部执行完毕,线程出来,锁自动打开

特点三:锁对象一定要是唯一的,可在前面static

细节:

  锁对象如果不是唯一,那就没有意义,因为线程对应的锁都不一样

  一般会写当前类的字节码文件,类名.class

 

同步方法:

  直接把Synchronized 加到方法上

  public synchronized 返回值类型 方法名(方法参数){}

特点一:同步方法锁住方法里所有的代码

特点二:锁对象不能自己指定,这是锁对象由java决定

  java规定:非静态方法,锁对象是this,当前方法的调用者;

  静态方法:当前类的字节码文件对象

 

Lock锁

  为了更清楚的表达如何加锁和释放锁,JDK5之后提供了新的锁对象Lock

它提供了获得锁和释放锁的方法,使得我们可以手动上锁,手动释放锁

注意:Lock是接口不能直接实例化创造对象,要通过它的实现类ReentrantLock来实例化

Lock lock = new ReentrantLock(); 

posted @   名泽  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示