synchronized实例方法体和synchronized代码块

synchronied void method(){

            .......
}

这个等同于下面将方法体用synchronized(this)代码块包围起来

void method(){
synchronized(this) {
.......
}
}

 这也就是说,synchronized实例方法是使用this(实例对象)的锁来执行线程的互斥处理的

如果想用synchronized锁方法那么,需保证只有一个实例对象,如果你将

用这个锁Thread内的一个方法,则,每个xxxThread.synchronizedMethod执行时,锁的是每个线程实例

,那个锁就不起作用了;只有3个线程都锁同一个对象才能保证互斥;

在single Threaded Execution中,三个人频繁通过一个只允许一个经过的门的情形

当人们通过门的时候,统计人数便会增加.另外程序还会记录通行者的"姓名与地址"

思路即UserThread建三个线程,gate类表示门

自己设计UserThread下面有一个进入门方法 使用synchronized修饰

    public synchronized void entergate() throws InterruptedException {
System.out.println(this.addr+": getCount***********"+gate.getCount());
Thread.sleep(1* new Random().nextInt(10)); gate.setCount(gate.getCount()+1);
gate.setName(this.name);
gate.setAddr(this.addr); }

 这个就会出现问题,因为3个线程,每个线程在执行entergate()锁的都是自己对象,那么就不能保证设计目的了

找出错误为下图

  

图解java多线程设计模式之一一synchronized实例方法体的更多相关文章

  1. [温故]图解java多线程设计模式(一)

    去年看完的<图解java多线程设计模式>,可惜当时没做笔记,导致后来忘了许多东西,打算再温习下这本书,顺便在这里记录一下~  1.顺序执行.并行.并发 顺序执行:多个操作按照顺序依次执行. ...

  2. [温故]图解java多线程设计模式(二)

    join & interrupt 这俩方法属于线程对象里的方法,属于线程本身的操作. join方法 用于等待一个线程的终止,等待期间将会阻塞,直到被等待的线程终止结束. 所以join可以用来做 ...

  3. 《图解Java多线程设计模式》读书笔记

    略读中...后面详读的时候,补充经典图片和文字说明

  4. java多线程设计模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...

  5. Java多线程设计模式(一)

    目录(?)[-] Java多线程基础 Thread类的run方法和start方法 线程的启动 线程的暂时停在 线程的共享互斥 线程的协调 Single Threaded Execution Patte ...

  6. Java多线程设计模式(4)线程池模式

    前序: Thread-Per-Message Pattern,是一种对于每个命令或请求,都分配一个线程,由这个线程执行工作.它将“委托消息的一端”和“执行消息的一端”用两个不同的线程来实现.该线程模式 ...

  7. java多线程(3)---synchronized、Lock

    synchronized.Lock 一.概述 1.出现线程不安全的原因是什么? 如果我们创建的多个线程,存在着共享数据,那么就有可能出现线程的安全问题:当其中一个线程操作共享数据时,还未操作完成,另外 ...

  8. Java多线程(四)—— synchronized关键字续

    1.synchronized原理 在java中,每一个对象有且仅有一个同步锁.这也意味着,同步锁是依赖于对象而存在.当我们调用某对象的synchronized方法时,就获取了该对象的同步锁.例如,sy ...

  9. Java多线程的同步机制(synchronized)

    一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...

随机推荐

  1. GoLang:通过url将值从view层(.tpl)传递到controller层

    beego框架 1.定义路由: beego.Router("/UpdateState/:statename/:id", &controllers.ContentContro ...

  2. Java知识复习(三)

    Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象.还是都不用. 在比较时先调用hashCode方法, ...

  3. 解决使用gomod后goland导包报红问题

    解决使用gomod后goland导包报红问题 项目环境: ubuntu14+goland 问题详情: 在root用户下执行go mod init {module name}使用了gomod,并编译了项 ...

  4. 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题

    一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...

  5. Python中Random随机数返回值方式

    1.a=["1","2","3"] print(random.choice(a)),  随机返回列表a中的一个元素 print(random ...

  6. MySQL基本sql语句总结

    目录 约束 表操作 查看表结构与修改表名 修改字段名与字段数据类型 添加与删除字段 修改字段的排列位置 删除表的外键约束 增删改 插入数据 更新数据 删除数据 查询 单表查询 连接查询 子查询 视图 ...

  7. 从DVWA靶场学代码审计

    DVWA是较为经典的一个传统漏洞的靶场 内置了low,medium,hight,impossible四个安全级别供安全人员去研究相关漏洞.今天就来对impossible这个级别进行代码审计,从中学习一 ...

  8. Vue $emit

    案例演示 需求:点击子组件触发一个事件改变父组件的字体大小. <div id="app"> <p :style="{fontSize: fontSize ...

  9. buu [V&N2020 公开赛]strangeCpp

    拖入ida,静态调试一下,本来想动调的,发现一直缺dll.没办法,只能头铁,静态 找到主函数,然后并没有发现什么,找了半天,没结果,后面也是看了大佬wp,才找到解决方式,感觉这种只能通过动调来找到关键 ...

  10. WAF集成:Acunetix和FortiWeb

    Acunetix API使您有机会自动化任务以提高效率,尤其是在您可以加速与工作流其他组件的集成功能时.在此示例中,我们将在上一篇文章的基础上,向您展示如何在Bash脚本中使用Acunetix API ...