zoukankan      html  css  js  c++  java
  • 图解java多线程设计模式之一一synchronized实例方法体

    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 泛型
    数据结构与算法分析java——线性表1
    常见链表题
    网络面试题集锦
    java 网络流 TCP/UDP
    java文件
    java IO流——字节流
    java IO流——字符流
    java集合框架——工具类
    java集合框架——Map
  • 原文地址:https://www.cnblogs.com/zytcomeon/p/14187967.html
Copyright © 2011-2022 走看看