标签:分代 影响 main 并发 存在 编程 特性 调用 无法
区别
synchronized关键字
synchronized作用是对类的当前实例(对象)加锁。可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对象的锁(Java
并发编程)。
synchronized代码块【synchronized(synObject)】使用起来比synchronized方法要灵活得多。因为也许一个方法中只有一部分代码只需要同步,如果此时对整个方法用synchronized进行同步,会影响程序执行效率。而使用synchronized代码块就可以避免这个问题(同步对象或类属性),synchronized代码块可以实现只对需要同步的地方进行同步。
与Lock的区别:
static synchronized:
每个类有一个锁,它可以用来控制对static数据成员的并发访问。访问static synchronized方法占用的是类锁,而访问非static synchronized方法占用的是对象锁。
static synchronized控制类的所有实例(对象)的访问(相应代码块)。synchronized相当于 this.synchronized,static synchronized相当于Something.synchronized
代码解析:
package com.xianggen.concurrent;
/**
static synchronized 和synchronized的区别!
关键是区别第四种情况!
*/
public class StaticSynchronized {
/**
/**
public static void main(String[] args) {
StaticSynchronized x=new StaticSynchronized();
StaticSynchronized y=new StaticSynchronized();
/**
* x.isSynA()与x.isSynB() :不能同时访问(同一个对象访问synchronized方法)
* x.isSynA()与y.isSynB() :能同时访问(不同对象访问synchronized方法)
* x.cSynA()与y.cSynB() :不能同时访问(不同对象也不能访问static synchronized方法)
* x.isSynA()与y.cSynA() :能同时访问(static synchronized方法占用的是类锁,而访问
* synchronized方法占用的是对象锁,不存在互斥现象)
*/
}
static synchronized与synchronized
标签:分代 影响 main 并发 存在 编程 特性 调用 无法
原文地址:https://www.cnblogs.com/cyy489/p/13286068.html