java高并发之synchronized

java高并发之synchronized

synchronized可以保证代码块或者方法在运行时,同一时刻只有一个方法可以进入临界区域,同时也可以保证共享变量的内存可见性

synchronized可以使用在三种情况:

1. 普通同步方法,锁是当前实例对象

2. 静态同步方法,锁是当前类的class对象

3. 同步方法块,锁是括号里面的对象

package com.tianmaying.crawler.impl;

public class SynchronizedTest {
    public synchronized void test1(){}
}
public void test2(){    synchronized (this){}}
public static synchronized void test3(){}

使用javap -c SynchronizedTest反编译项目

可以看出来:

同步方法,同步静态方法:都是标注了方法是synchronized,并没有什么特殊标注,但是据文章《http://www.cnblogs.com/javaminer/p/3889023.html》,表示该方法的access_flags字段的synchronized标志位置为1

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

两个概念:java对象头、monitor

原文地址:https://www.cnblogs.com/zhangchiblog/p/8934088.html

时间: 2024-11-11 10:47:26

java高并发之synchronized的相关文章

Java高并发之锁优化

本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 1 public synchronized void syncMethod(){ 2 othercode1(); 3 mutextMethod(); 4 othercode2(); 5 } 改进后 1 public void syncMethod2(){ 2 othercode1(); 3 synchronized(this){ 4 mutextMethod(); 5 } 6 othercode2()

Java高并发之无锁与Atomic源码分析

目录 CAS原理 AtomicInteger Unsafe AtomicReference AtomicStampedReference AtomicIntegerArray AtomicIntegerFieldUpdater 无锁的Vector 无锁即无障碍的运行, 所有线程都可以到达临界区, 接近于无等待. 无锁采用CAS(compare and swap)算法来处理线程冲突, 其原理如下 CAS原理 CAS包含3个参数CAS(V,E,N).V表示要更新的变量, E表示预期值, N表示新值.

Java高并发之设计模式.

本文主要讲解几种常见并行模式, 具体目录结构如下图. 单例 单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的. 一般分为懒汉式, 饿汉式. 懒汉式: 方法上加synchronized 1 public static synchronized Singleton getInstance() { 2 if (single == null) { 3 single = new Singleton(); 4 } 5 return single; 6 } 这种方式, 由于每次获

Java高并发之同步异步

1.概念理解: 2.同步的解决方案: 1).基于代码 synchronized 关键字 修饰普通方法:作用于当前实例加锁,进入同步代码前要获得当前实例的锁. 修饰静态方法:作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁. 修饰代码块:指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁. code1 package com.thread; import java.util.concurrent.ExecutorService; import java.util.concur

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

前置知识 了解Java基本语法 了解多线程基本知识 知识介绍 Synchronized简介:作用.地位.不控制并发的后果 两种用法:对象锁和类锁 多线程访问同步方法的7种情况:是否是static.Synchronized方法等 Synchronized的性质:可重入.不可中断 原理:加解锁原理.可重入原理.可见性原理 Synchronized的缺陷:效率低.不够灵活.无法预判是否成功获取锁 常见问题: 如何选择Lock或Synchronized等 如何提高性能.JVM如何解决那个线程获取锁等 S

Java高并发之线程池详解

线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升. 另外一个好处是可以设定池化对象的上限, 例如预防创建线程数量过多导致系统崩溃的场景. jdk中的线程池 下文主要从以下几个角度讲解: 创建线程池 提交任务 潜在宕机风险 线程池大小配置 自定义阻塞队列BlockingQueue 回调接口 自定义拒绝策略 自定义ThreadFactory 关闭线程池

Java并发之synchronized关键字和Lock接口

欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse,欢迎star 引用 当开发过程中,我们遇到并发问题.怎么解决? 一种解决方式,简单粗暴:上锁.将千军万马都给拦下来,只允许一个人过独木桥.书面意思就是将并行的程序变成串行的程序.现实的锁有门锁.挂锁和抽屉锁等等.在Java中,我们的锁就是synchronized关键字和Lock接口. synchronized关键字 synchronized也叫同步锁,是Java里面的关键字.我们可以猜测到synchroni

Java并发之synchronized关键字深度解析(二)

前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实现的给对象加锁?首先我们要了解一下java中对象的组成.java中的对象由3部分组成,第一部分是对象头,第二部分是实例数据,第三部分是对齐填充. 对齐填充:jvm规定对象的起始内存地址必须是8字节的整数倍,如果不够的话就用占位符来填充,此部分占位符就是对齐填充: 实例数据:实例数据是对象存储的真正有

java并发之synchronized

在Java中,每一个对象都拥有一个锁标记(monitor),也称为监视器,多线程同时访问某个对象时,线程只有获取了该对象的锁才能访问. 在Java中,可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对象的锁,其他线程才能执行这个方法或者代码块. 注意: 1)当一个线程正在