java数据同步处理_Java如何处理多线程的数据同步问题
在这里写这种文章好奇怪,先用作笔记吧
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如何处理多线程的数据同步问题相关推荐
- java 线程 状态 图_Java提高——多线程(一)状态图
操作系统中的进程和线程的概念 进程是指一个内存运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程,比如windows下的一个运行的应用程序.exe就是一个进程. 线程是指进 ...
- java大文件导入_java导入大文件数据的解决方案
2018年11月5号于南昌 中海蓝域小区 卧榻伴音弦 最近在做项目,一个20G大小的文件,要按行读入到数据库,妈呀,有什么好方法吗? 20G如果按照行读入的方式,需要20多个小时才能入库成功.主要性能 ...
- java双重循环去重_java List去除重复数据实现
作者:多纤果冻 blog.csdn.net/qq_37939251/article/details/90713643 注:参照的文章完成的是int类型去重. String 类型基本一致,我完成的dem ...
- mysql 处理数据_MySQL数据库,如何处理重复的数据?
前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...
- java数据同步解决方案_Java实现多线程数据同步的几种方法
1. 应用背景 程序在设计当中如果采取多线程操作的时候,如果操作的对象是一个的话,由于多个线程共享同一块内存空间,因此经常会遇到数据安全访问的问题,下面看一个经典的问题,银行取钱的问题:1).你有一张 ...
- java线程的优点_Java使用多线程的优势
Java使用多线程的优势 如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能.那么Java使用多线程的优势具体有哪些呢,一起来了解一下! 1.发挥多处理器的强大能力 现 ...
- java 下载暂停实现_Java实现多线程断点下载(下载过程中可以暂停)
线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配. ...
- java中线程总结_java中多线程学习笔记总结
线程的简单学习笔记: 1.进程与线程的概念 进程:从用户角度看进程是应用程序的一个执行过程. 从操作系统核心角度看进程代表的是操作系统分配的内存和CPU时间片等资源的基本单位,是为正在运行的程序提供的 ...
- java游戏输赢统计_java利用多线程和Socket实现猜拳游戏
本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...
最新文章
- 暑期大作战 第五天(第四天待补)
- linux安装教程6.3,CentOS 6.3安装教程(详细图解)
- pythonurllib模块-Python中的urllib模块使用详解
- window 配置wnmp(转下整理 ,全)
- 最全!最完整的求first集和follow的代码!!!编译原理 FIRST集和FOLLOW集的求法 代码,程序,实验报告
- java 获取枚举对象_Java:获取与枚举相关联的对象
- 理解搜索引擎并且善用google
- Mr.J--ES6特性学习笔记
- HeadFirst之设计模式 觀察者模式
- DockerFile入门指南
- asp.net core mvc 管道之中间件
- 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
- 华硕笔记本返厂维修流程_笔记本不能更换显卡为何又叫独立显卡?
- ​​商朝是广西骆越人北上建立的政权,是骆越文化的延续
- 哔哩哔哩 B站挂了!完了,5个9可靠性,超时了!
- 揭秘互联网金融的大数据风控
- 【mybatis】mybatis的工作原理
- 计算机网络协议分为哪几层?7层协议、5层协议、4层协议。
- matlab怎么列向量归一化语句,matlab向量归一化
- 汇总一下Intellij IDEA炫酷的插件