java并发访问_Java并发访问

1 线程安全

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

2 局部变量并不会数据共享

局部变量,不同线程的并不共享,所以并不会发生覆盖

PrivateNum p=new PrivateNum();

MyThread threadA=new MyThread('A',p);

MyThread threadB=new MyThread('B',p);

threadA.start();

threadB.start();

public void test( char i) {

try {

int num=0;

- - - - - - -

}

catch (InterruptedException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}}

3 实例成员变量数据共享

PrivateNum p=new PrivateNum();

MyThread threadA=new MyThread('A',p);

MyThread threadB=new MyThread('B',p);

threadA.start();

threadB.start();

public void test( char i) {

int num=0;

try {

- - - - - - -

}

catch (InterruptedException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}}

线程AB访问的是同一个变量(指向同一个地址),所以这个时候会发生覆盖,同时这里出现了线程安全问题

4 synchronized关键字可以避免线程安全问题

如果多个线程访问的是同一个对象方法中的局部变量,那么这个变量并不共享,线程AB对此变量的操作将互不影响

如果多个线程访问的是同一个对象方法中的成员变量,那么这个变量共享,如果不处理好线程问题,可能会出现线程安全问题

通过synchronized关键字可以使方法同步

5 多个线程访问的是两个不同实例的同一个同步方法

public static void main(String[] args) {

PrivateNum p1=new PrivateNum();

PrivateNum p2=new PrivateNum();

MyThread threadA=new MyThread('A',p1);

MyThread threadB=new MyThread('B',p2);

threadA.start();

threadB.start();

}}

这是因为这里是两个锁,创建了p1和p2对象,创建的是两个锁,锁对象不同不造成互斥作用

6 多线程调用同一个实例的两个不同(一个同步,一个非同步)方法

MyThread threadA=new MyThread('A',p1);

MyThread2 threadB=new MyThread2('B',p1);

threadA.start();

threadB.start();

线程B可以异步调用非同步的方法

7 死锁

线程AB开始执行时,因为锁不同,所以不互斥,A当执行到另一个同步代码块(锁2)的时候,由于这个时候锁给线程B占有了,所以只能等待,同样B线程也是如此,AB互相抢对方的锁,但是所以造成了死锁

8 总结

多个线程调用的不同实例的同步方法,线程不互斥。

如果两个线程的锁对象一样(都是p1),两个线程分别调用同步方法和非同步方法,线程不会同步执行。

但是如果调用两个不同的同步方法,因为锁对象一致,两个线程同步执行。

设想一个情况,有一个实例有两个方法,一个修改值(synchronized),一个读值(非synchronized),此时两个线程一个修改值,一个读取值,这个时候因为这两个线程并不会挣抢锁,两个线程互不影响,那么此时可能就会出现一种情况,线程A还没修改完,线程B就读取到没有修改的值。这就是所谓的脏读。

重入锁,一个获得的锁的线程没执行完可以继续获得锁。

线程占用锁的时候,如果执行的同步出现异常,会将锁让出。

父类方法同步,子类重写该方法(没有synchronized关键字修饰),是没有同步作用的。

同步代码块的锁对象可以是本对象,也可以是其他对象。同一个锁对象可以产生互斥作用,不同锁对象不能产生互斥作用

一个方法中有同步代码块和非同步代码块,同步代码块的代码是同步执行的(块里的代码一次执行完),而非同步代码块的代码可以异步执行

一个对象中的不同同步代码块是互斥的,执行完一个代码块再执行另一个代码块

同步代码块(this)和synchronized方法的锁定的都是当前对象 this

Class类也可以是锁,Class锁的实现可以通过静态的synchronizd方法,也可以通过静态方法里面的同步代码块(锁对象为Class)

静态类的同步方法锁对象还是该类的一个实例

volitate增加了实例变量在对个线程之间的可见性,保证我们获得的是变量的最新值。

volatile在读上面保持了同步作用,但是在写上面不保持同步

synchronized的同步作用不仅保证了对同一个锁线程的互斥,还保证了数据的同步

volatile对比synchronized

两者修饰的不同,volatile修饰的是变量,synchronized修饰的是方法和代码块

两者的功能不同。volatile保证数据的可见性,synchronized是线程同步执行(间接保证数据可见性,让线程工作内存的变量和公共内存的同步)

volatile性能比synchronized性能高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3行代码实现ftp 上传、下载、删除操作集合

为了帮助小伙伴们便捷操作ftp,现对常用的上传、下载、删除功能进行封装,小伙伴只需要传入需要的参数操作即可!告诉小伙伴好消息,本项目我已开源,大家可以根据需要克隆run起来!!! 文章…

Logtail从入门到精通(一):日志采集杂谈

摘要: 目前logtail已承载阿里云全站、所有云产品服务、全球各Region部署、阿里巴巴集团(淘宝、天猫、菜鸟等)上重要服务的数据采集。每天采集接近百万服务器上数PB的实时数据,对接数千个应用与消费者。什么是日志提到日志&#xf…

互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go OPPO Reno2正式发布&#xf…

python输出不重复的单词_Python情感分析(比较单词时,不计算文本中重复的单词)...

您可以使用嵌套的for loop来实现这一点,但是这并不是解决简单问题的好方法:for posWord in posWords:for test in readFile:if i test:counter 1print iprint(counter)这并不是分析情绪的有效方法,相反,你只是在检查文本中是否存…

Logtail从入门到精通(二):开启日志采集之旅

摘要: 为了更好的了解日志采集,这里我们首先对日志采集中遇到的基本概念进行简要的介绍。Logtail相关概念为了更好的了解日志采集,这里我们首先对日志采集中遇到的基本概念进行简要的介绍。概念介绍项目: 项目(Project…

java数组下标越界_在java中,解决数组下标越界的问题

//获取文本内容publicstaticListgetText(StringfilePath){ListsimplesnewArrayList();try{FileReaderreadernewFileReader(filePath);BufferedReaderbfRead...// 获取文本内容public static List getText(String filePath) {List simples new ArrayList();try {FileReader read…

vsftpd常用操作

适用于Centos7.x 作用命令启动systemctl start vsftpd.service关闭systemctl stop vsftpd.service重启systemctl restart vsftpd.service查看运行状态systemctl status vsftpd.service设置开机启动systemctl enable vsftpd.service在线安装yum install -y vsftpd源码安装rpm -…

关于SDN的未来,Linux基金会专访阿里云网络大神

摘要: 近日,大家熟知的国际开源组织Linux基金会与阿里云进行了一次访谈。专访了阿里云网络团队掌门人江鹤。江鹤执掌阿里云网络产品线,并负责阿里集团网络虚拟化产品的研发管理工作。在软件定义网络(SDN)和网络功能虚拟…

5G 共建共享,究竟会带来什么影响?

戳蓝字“CSDN云计算”关注我们哦!共建共享真的来了。根据9月9日中国联通发布的公告,中国联通和中国电信正式签署了《5G网络共建共享框架合作协议书》,将在全国范围内合作共建一张5G接入网络。图片来源网络小枣君认为,这一事件对于…

java 纳秒 毫秒_golang的time包:秒、毫秒、纳秒时间戳输出方式

菜鸟的时候只知道时间戳有10位、13位、还有好长位数的。入坑久了才明白10位数的时间戳是以 秒 为单位;13位数的时间戳是以 毫秒 为单位;19位数的时间戳是以 纳秒 为单位;golang中可以这样写:package mainimport ("time"…

object转float_人工智能-Object Detection API 模型转tflite并验证

最近在用TensorFlow Object Detection API训练目标检测模型,训练好的pb模型大小17.6M,用pb预测效果不错,于是想着如何在手机端运行,查看官网关于tflite的转换,网址:https://github.com/tensorflow/models/b…

Multi Task Learning在工业界如何更胜一筹

摘要: 本文主要介绍多任务学习和单任务学习的对比优势以及在工业界的一些使用。如何从单任务学习转变为多任务学习?怎样使AUC和预估的准确率达到最佳?如何对实时性要求较高的在线应用更加友好?本文将以淘宝实例为大家进行分享多任…

rsync一行代码实现远程文件同步之修改默认22端口

由于需求需要把应用服务器上的日志文件同步到文件服务器上,但是又不能用22端口 文章目录一、应用服务器脚本修改如下二、文件服务器操作三、执行脚本测试四、应用服务器生成ssh key五、文件服务器添加key5.1. 打开.ssh文件夹目录:5.2. 创建authorized_ke…

上云难?TA霸气回应:不要你觉得,一键上云 so easy!

戳蓝字“CSDN云计算”关注我们哦!图片来源网络2019年阿里提出的“All in Cloud”战略以及《全球云计算 IT 基础设施市场预测报告》的数据结果,都在表明企业上云已成不可逆之势;但上云事故接二连三发生似乎又在宣示企业上云之路道阻且长&#…

基于阿里云HiTSDB搭建工业物联网平台实践

摘要: 基于阿里云全面的物联网、云计算与大数据技术搭建云端的企业能源管理物联网平台实现能耗数据采集、统计分析、平衡调度、节能优化等全面的能源管控协同平台。是企业生产运行保障的利器,也是大量企业实现云上管理的实践案例。背景工业企业的能耗占了…

java对象深克隆_JAVA中对象的克隆及深拷贝和浅拷贝

使用场景:在日常的编程过程 中,经常会遇到,有一个对象OA,在某一时间点OA中已经包含了一些有效值 ,此时可能会需一个和OA完全相对的新对象OB,并且要在后面的操作中对OB的任何改动都不会影响到OA的值&#xf…

python安装pyserial模块_Python使用模块Pyserial模块报

用pip安装pyserial后:sudo -H pip install pyserial,运行新建的程序,名称为serial.py,程序中用到:import serial.toos.list_ports,但总是提示ImportError:No module named tools.list_ports,在度娘一顿乱搜后,在stack…

阿里巴巴开源的通用缓存访问框架JetCache介绍

摘要: JetCache是由阿里巴巴开源的通用缓存访问框架,如果你对Spring Cache很熟悉的话,请一定花一点时间了解一下JetCache,它更好用。JetCache可以做类似Spring Cache的注解式缓存,支持TTL、多级缓存、分布式自动刷新&a…

mysql数据库的总结

https://blog.csdn.net/LanlanDeming/article/details/103786146

写速度提升20%,Elasticsearch 创始人给腾讯云发来感谢信

近日,Elasticsearch 的创始人兼首席执行官Shay Banon 向腾讯云发出了一封“特別”的邮件,专程对腾讯团队为Elasticsearch开源社区做出的贡献表示了感谢。 据了解,腾讯工程师通过提交代码,成功优化了Elasticsearch高并发写入性能&…