• Java进阶1. Synchronized 关键字


    Java进阶1. Synchronized 关键字 20131025

    1.关于synchronized的简介:

             Synchronized 关键字代表对这个方法加锁,相当于不管那一个线程,运行到这个方法的时候,都要检查有没有其他的线程在使用这个方法,如果有的话就要的等待正在使用synchronized方法的线程运行完成之后才可以运行此方法;如果没有的话就直接运行。

    2.常见的使用方法

             Synchronized方法:

             使用synchronized关键字声明synchronized方法的形式:

             public synchronized void accessVal(int newVal);

             synchronized方法控制对于成员变量的访问,每一个实例的话对应一把锁,每一个synchronized方法必须获得调用给方法的类的实例的锁,才可以执行,否则所属的线程阻塞,方法一旦执行的话,机会独占该锁,知道返回的时候才会将该对象的锁释放掉。这一种机制确保了用一个时刻对于每一个实例来说,类中声明为synchronized的成员函数中至多有一个处于可以执行的状态,因为最多一个线程可以获得该对象的锁,从而有效的避免了类成员变量的访问冲突。

             在Java中,不仅对象会有一把锁,每一个类也会对应一把锁,专业那个我们可以将类的静态成员函数声明为synchronized以接受其对于类的静态成员变量的访问。

             Synchronized块:

             通过synchronized关键字声明同步代码块:

             synchronized(Obj){};

             这是一个代码块其中的代码块必须获得对象的锁,才可以执行,当然也存在obj.wait() + while(condition),来释放对象的锁,等到notify来唤醒。

    3对于synchronized(this)的理解

             当对于两个并发线程访问同一个对象obj的synchronized(this)代码块的时候,一个时间内只会有一个线程得到执行,其他的线程必须等待;但是另一个线程可以访问代码块中其他的非synchronized(this)代码块;

    4.对于synchronized的用法

    4.1public synchronized void func(); 声明类的成员函数是synchronized ,实际上是获得的这个对象的锁,所以其他的线程是不可以访问其他的synchronized方法的,因为锁住了当前对象。

    4.2synchronized(Object obj){}代码快的话,对于此对象的代码块,只允许一个线程访问,但是针对的是同一个对象;

    4.3synchronized(class) 锁住该类,将整个类lock主,访问该类中所有的同步方法,不会对象是不是同一个,都会阻塞。

  • 相关阅读:
    next_permitation
    POJ 1979 Red and Black
    POJ 2386 Lake Counting
    BFS简单迷宫
    部分和问题
    图论复习--二分图判断
    danci1
    danci
    jquery事件重复绑定解决办法
    danci
  • 原文地址:https://www.cnblogs.com/hbhzsysutengfei/p/3409554.html
Copyright © 2020-2023  润新知