在这里写这种文章好奇怪,先用作笔记吧

Java中有如下的方法来处理代码块的并发访问问题:

一是关键字synchronized

二是加锁(锁对象,条件对象)

Java给每一个对象都提供了一个内部锁,在方法的定义中加上关键字synchronized后,那么对象的锁将保护整个方法。也就是说下面两种写法是等价的:

public synchronized void method()

{

......

}

public void method()

{

this.intrinsickLock.lock();

try

{

......

}

finally

{

this.intrinsickLock.unlock;

}

}

Java Core中对以上两种方式都不推荐!

关键词synchronized解读:

synchronized实现原理就是Java为每一个对象都内置了一个锁。对于一个类的普通方法来说,synchronized锁住的是每一个new出来的对象的方法,比如说对于如下代码:

public class Test{

public void synchronized testMethod()

{

.......

}

}

Test obj1 = new Test();

Test obj2 = new Test();

如果Thread-1 访问的是obj1,Thread-2访问的是obj2,那么两个线程都不会阻塞,因为这是两个不同的对象。

如果Thread-1 访问的是obj1,Thread-2访问的也是obj1,那么Thread-2会阻塞,因为两个线程访问的是同一个的对象,但是Thread-1先获取了锁,所以Thread-2必须等到Thread-1释放了锁,才能访问。

对于一个静态方法而言,synchronized则成为了一个类锁,对于上面所描述的场景,两种情况下,Thread-2都会被阻塞,因为静态方法是类的所有对象都共享的。

synchronized除了能锁整个方法之外,也能锁代码块。

一种写法是:

public void method()

{

synchronized(this)

{

....

}

.....

}

另外一种写法是:

Object obj = new Object();

public void method()

{

synchronized(obj)

{

....

}

.....

}

第二种写法更加灵活一些。在用synchronized的时候,需要当心的是过度使用synchronized来进行保护,造成性能的问题。

java数据同步处理_Java如何处理多线程的数据同步问题相关推荐

  1. java 线程 状态 图_Java提高——多线程(一)状态图

    操作系统中的进程和线程的概念 进程是指一个内存运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程,比如windows下的一个运行的应用程序.exe就是一个进程. 线程是指进 ...

  2. java大文件导入_java导入大文件数据的解决方案

    2018年11月5号于南昌 中海蓝域小区 卧榻伴音弦 最近在做项目,一个20G大小的文件,要按行读入到数据库,妈呀,有什么好方法吗? 20G如果按照行读入的方式,需要20多个小时才能入库成功.主要性能 ...

  3. java双重循环去重_java List去除重复数据实现

    作者:多纤果冻 blog.csdn.net/qq_37939251/article/details/90713643 注:参照的文章完成的是int类型去重. String 类型基本一致,我完成的dem ...

  4. mysql 处理数据_MySQL数据库,如何处理重复的数据?

    前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...

  5. java数据同步解决方案_Java实现多线程数据同步的几种方法

    1. 应用背景 程序在设计当中如果采取多线程操作的时候,如果操作的对象是一个的话,由于多个线程共享同一块内存空间,因此经常会遇到数据安全访问的问题,下面看一个经典的问题,银行取钱的问题:1).你有一张 ...

  6. java线程的优点_Java使用多线程的优势

    Java使用多线程的优势 如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能.那么Java使用多线程的优势具体有哪些呢,一起来了解一下! 1.发挥多处理器的强大能力 现 ...

  7. java 下载暂停实现_Java实现多线程断点下载(下载过程中可以暂停)

    线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配. ...

  8. java中线程总结_java中多线程学习笔记总结

    线程的简单学习笔记: 1.进程与线程的概念 进程:从用户角度看进程是应用程序的一个执行过程. 从操作系统核心角度看进程代表的是操作系统分配的内存和CPU时间片等资源的基本单位,是为正在运行的程序提供的 ...

  9. java游戏输赢统计_java利用多线程和Socket实现猜拳游戏

    本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...

最新文章

  1. 暑期大作战 第五天(第四天待补)
  2. linux安装教程6.3,CentOS 6.3安装教程(详细图解)
  3. pythonurllib模块-Python中的urllib模块使用详解
  4. window 配置wnmp(转下整理 ,全)
  5. 最全!最完整的求first集和follow的代码!!!编译原理 FIRST集和FOLLOW集的求法 代码,程序,实验报告
  6. java 获取枚举对象_Java:获取与枚举相关联的对象
  7. 理解搜索引擎并且善用google
  8. Mr.J--ES6特性学习笔记
  9. HeadFirst之设计模式 觀察者模式
  10. DockerFile入门指南
  11. asp.net core mvc 管道之中间件
  12. 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
  13. 华硕笔记本返厂维修流程_笔记本不能更换显卡为何又叫独立显卡?
  14. ​​商朝是广西骆越人北上建立的政权,是骆越文化的延续
  15. 哔哩哔哩 B站挂了!完了,5个9可靠性,超时了!
  16. 揭秘互联网金融的大数据风控
  17. 【mybatis】mybatis的工作原理
  18. 计算机网络协议分为哪几层?7层协议、5层协议、4层协议。
  19. matlab怎么列向量归一化语句,matlab向量归一化
  20. 汇总一下Intellij IDEA炫酷的插件

热门文章

  1. 为什么要用MyBatis-MyBatis
  2. 获取Class类对象的三种方式
  3. Hive的基本操作-创建内部表
  4. 日志规范之slf4j整合Log4j以及Logback
  5. Response_案例1_路径_相对路径
  6. java i o流异常问题_第四章 Java的I/O流和异常处理
  7. log4j 2.x --LogManager
  8. allegro PCB 引脚网络名不显示之解决办法
  9. Subversion的权限控制
  10. Linux知识积累(8)卸载安装jdk