java 同步锁_java线程中的同步锁和互斥锁有什么区别?
在java中,同步锁和互斥锁英文关键字都是Synchronized,没有本质上的区别,两者都包括对资源的独占,使用起来没有区别。概念上的区别是
1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,执行顺序是一个乱序,没有固定的执行顺序。
2:同步是协调多个相互关联线程合作完成任务,彼此之间知道对方存在,执行顺序往往是有序的。线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务。
由于同步锁和互斥锁在使用中没有任何区别,仅仅是因为线程的关系导致了概念上的一点点区别,所以不必深究其异同。很多教程中并没有对这两者作区分。
下面通过一个实例来掌握同步锁的原理和使用方法。先来执行一下如下没有加锁的代码:
public class LockDemo { private int i = 0; public void increaseI() { // synchronized (this) { for(int k=1;k<=10;k++) { // 对i执行10次增1操作 i++;i--;i++;i--;i++;i--;i++;i--;i++;i--;i++;i--;i++;i--;i++;i--;i++;i--; i++; } System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i); //} } public static void main(String[] args) throws InterruptedException { LockDemo ld = new LockDemo(); int threadNum = 1000; MyThread[] threads = new MyThread[threadNum]; for(int i=0;i
代码预期的结果为10000。实际输出结果不到10000。
没有加互斥锁
这是因为1000个线程共享了对象ld的属性i,在访问修改i的值时,可能会出现不同步的情况。
线程的同步(互斥)正是为了防止多个线程访问一个数据对象时,对数据造成的破坏:去掉第4行和第10行的注释,给increaseI()方法加锁后,各个线程对变量i的访问就是互斥的了,就不会对数据造成无法预估的结果:输出结果为预期的10000。
java 同步锁_java线程中的同步锁和互斥锁有什么区别?相关推荐
- 线程java买火车票_Java线程中卖火车票问题的深入讲解
用java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票. 代码如下. package lesson; public class demo1 { public static ...
- wait放弃对象锁_Java线程中wait、await、sleep、yield、join用法总结
一.wait().notify().notifyAll()用法 obj.wait()/obj.wait(long timeout)是Object中的方法,当线程调用wait()方法,当前线程释放对象锁 ...
- java runnable 异常_JAVA 线程中的异常捕获
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
- java run 方法_java线程中的run()方法能有几个啊?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给个例子 package test; public class Test{ public static void main(String[] args){ ...
- 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理
共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...
- 线程中的同步和异步的区别
线程中的同步和异步的区别 一.同步 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作.是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率不 ...
- python中的非阻塞使用互斥锁
锁定方法acquire可以有一个blocking参数. 如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为止(如果没有指定,那么默认为True) 如果设定blocking为Fal ...
- golang中关于读写锁、互斥锁的理解
锁的概述 为了解决协程同步的问题我们使用了channel,但是GO也提供了传统的同步工具. 它们都在GO的标准库代码包sync和sync/atomic中. 下面我们看一下锁的应用. 什么是锁呢?就是某 ...
- java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?
展开全部 wait是让使用wait方法的对象等待,暂时先把对象锁给让出来,给其它持有该锁的对象用,其它对象用完后再636f707962616964757a686964616f3133333739623 ...
最新文章
- 【深入理解JVM】:类加载器与双亲委派模型
- 阿里云助力浙江大学信息化建设,以实时数据驱动校园智能管理
- python 高级编程 豆瓣_python 的一些高级编程技巧
- 台式计算机技术参数响应表,联想台式电脑配置推荐及参数详情【图文】
- NLPIR语义智能平台支持大数据个性化学习
- Android10 root,Android Q系统Magisk完美实现ROOT
- UI布局引擎Layout 之 QGraphicsLinearLayout
- zabbix监控memcached
- Knowledge-based Systems期刊投稿经历
- Ubuntu18.04安装搜狗输入法使用时不能输入中文
- Unity 灯光系统(一)
- DTI | Drug-target interaction | 基础知识
- 抖音发广告需要注意什么,三个注意事项与规范要牢记
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 【概率题汇总】互联网公司概率面试题整理
- 【冰点】:重庆“高烧”不退
- function介绍
- The fourth,fifth,sixth,seventh episode of Crazily Speak English
- 4位数字验证码图片识别 +tensorflow+CNN
- 路科验证MCDF_svlab3笔记