synchronized能解决线程安全问题大家都知道,大多数线程问题也都是他解决的,但是他有一个致命的弊端,就是慢
synchronized标记的方法是按顺序执行的,如下代码

public class demo1 extends Thread{
@Override
synchronized public void run() {try {System.out.println(Thread.currentThread().getName()+"开始");sleep(5000);         //用休眠表示重要操作System.out.println(Thread.currentThread().getName()+"结束");sleep(5000); } catch (InterruptedException e) {e.printStackTrace();}
}
}
public class Main {public static void main(String[] args) {demo1 demo=new demo1();Thread d1=new Thread(demo);Thread d2=new Thread(demo);d1.start();d2.start();}}


可以看出synchronized是按顺序执行,d1没有执行完,d2是不能执行的,而加了synchronized后的执行时间必定是20秒(1次休眠时间是5秒)
而不加synchronized,它的执行时间应该是10秒,(实际要多上几毫秒,忽略不计),因为不加synchronized后d1和d2是同步执行的,互不影响吧。
因此使用synchronized时其实我们要仔细,自己的代码是否需要线程安全,synchronized是加给变量还是方法都需要认真考虑。
另外我们可以使用synchronized(变量)来优化性能,它只保持括号内变量的线程安全

synchronized的弊端相关推荐

  1. 第二十四章 死抠synchronized关键字

    synchronized关键字 关于多线程,主要问题就是如何控制对共享资源的访问.如何保证多个线程访问的数据是一致的,即保证数据的一致性成为多线程编程必须要解决的问题.在Java中,如果多个线程对一个 ...

  2. threadlocal使用场景_深入剖析ThreadLocal

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 朋友们在遇到线程安全问题的时候,大多数情况下可能会使用synchronized关键字,每次只允许一个线程进入锁定的方法或代码块,这样就可以保 ...

  3. 原子操作Atomic类

    文章目录 一.Synchronized的弊端 二.原子操作类 Atomic 2.1 CAS 机制 2.2 CAS 底层原理 2.3 ABA 问题 一.Synchronized的弊端 同步锁Synchr ...

  4. 一个简单的synchronized多线程问题、梳理与思考

    一个程序,多个线程同时操作一个变量,给这个变量+1().功能很简单,可是怎么样去实现呢?这其中涉及到了哪些问题? 最基础想法 见代码: 1 public class Test extends Thre ...

  5. Java多线程-synchronized关键字

    进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行. 一个进程中至少有一个线程 Ja ...

  6. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  7. synchronized()_这篇文章带你彻底理解synchronized关键字

    Synchronized关键字一直是工作和面试中的重点.这篇文章准备彻彻底底的从基础使用到原理缺陷等各个方面来一个分析,这篇文章由于篇幅比较长,但是如果你有时间和耐心,相信会有一个比较大的收获,所以, ...

  8. Java多线程之synchronized(二)

    为了解决"非线程安全"带来的问题,上一节中使用的办法是用关键字synchronized修饰多个线程可能同时访问到的方法,但是这样写是存在一定的弊端的,比如线程A调用一个用synch ...

  9. 什么时候用synchronized

    解决安全问题的方式: java中提供了一个同步机制: 解决原理:让多条操作共享数据的代码在某一个时间段,被一个线程执行完,在执行过程中,其它线程不可以参与执行 同步格式: 同步代码块: synchro ...

最新文章

  1. 从外部导入django模块
  2. rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警
  3. NGUI中UILabel使用url标签的一个bug
  4. AI(artificial intelligence)的学习
  5. 爱奇艺CEO龚宇呼吁网络电影涨价:6块钱太低了
  6. 随想录(串口屏带来的启示)
  7. Axure中后台管理信息系统通用原型方案 /框架模板/数据仪表/团队协作/会员管理/电商系统/资金统计/数据监控/销量统计/订单管理/客户管理/团队协作/职务管理/业务信息/员工管理/即时通讯
  8. CVPR2018论文阅读-Faster MPN-COV:迭代计算矩阵平方根以快速训练全局协方差池化
  9. 项目管理深入理解03--质量管理
  10. 轻松调用Google翻译
  11. 汇编语言浮点数指令集
  12. security update 补丁更新失败
  13. Xenu's Link Sleuth 的使用
  14. calico源码分析-ipam(1)
  15. Directx11学习笔记【十】 画一个简单的三角形
  16. mysql创建管理员账户
  17. lol-----寒冰射手-----艾希
  18. 最佳实践 | 通过用户画像工具确定目标用户
  19. 打包时出现的异常。XXXXXXX-1.0-SNAPSHOT.jar中没有主清单属性的解决办法
  20. 马斯克中止推特收购,分手费10亿美元

热门文章

  1. linux No space left on device 问题排查以及解决
  2. 如何利用Guitar Pro制作简单的尤克里里弹唱曲谱(一)
  3. 怎样做出一份优秀的数据可视化大屏| 推荐收藏
  4. EduCoder-Web程序设计基础-html5— 简历表页面的制作-第2关:简历表页面的样式设计
  5. Java小游戏——捕鱼达人
  6. js转换html为图片(html2canvas模糊变清晰)
  7. 数据库课程设计——MySQL火车票售票系统
  8. 教育企业建站设计方案
  9. 苹果7全网通经常显示无服务器,抖音教会我8个iPhone隐藏技巧,就连苹果老用户也未必全知道...
  10. MQ消息中间件(工作+面试)