什么时候用synchronized

解决安全问题的方式:

java中提供了一个同步机制:

解决原理:让多条操作共享数据的代码在某一个时间段,被一个线程执行完,在执行过程中,其它线程不可以参与执行

同步格式:

       同步代码块:

       synchronized(对象)  //对象可以是任意对象,但是不能是匿名对象和匿名子类对象

       {

              需要同步的代码;

       }

 

Synchronized关键字是确定同步区域,对象表示锁

只有持有锁的线程才可以进入到同步中,执行里面的代码。执行完毕后,线程走出同步(区域),同时释放锁

 

同步原理:

              通过一个对象锁,将多条操作共享数据的代码语句进行了封装并加锁

              只有持有这个锁的线程才可能进入同步中的去执行代码,在执行期间,即使其他线程获得了cpu的执行权,但是因为没有获取锁,所以线程只能在同步外面等,只有同步中的线程执行完同步中的代码,走出同步代码块时,线程才会释放这个锁。那么其他线程才有机会获取这个锁,并且只有一个线程获取到锁,进入到同步代码块中

 

       sleep() :线程不会释放锁,但是会短暂失去cpu执行权和执行资格,睡眠时间一到,线程就重新获取执行资格

      

       同步好处:

              同步的出现解决了多线程的安全问题。

       同步弊端:

              因为多个线程每次都要判断这个锁,所以效率会降低

 

同步的前提:

              1,必须是两个或者两个以上的线程才需要同步

              2,必须要保证多个线程使用的是同一个锁,才可以实现多个线程被同步

             

       如果加上同步安全问题依然存在,就按照这两个前提来排除问题

 

 

 

 

同步函数:

 

需求:有两个客户,往银行里存钱,每个每次存100,存3次

 

 

判断代码是否存在安全隐患

分析:

1,查看线程代码中是否有共享数据

2,这个共享数据有没有被多条语句所操作

 

发现:sum是共享数据,有两条语句在操作这个共享数据,如果这两条语句被多个线程分开执行

也就是一个线程没有执行完,其它线程就参与执行,就容易发生安全问题

 

解决办法:加入同步机制,将需要被一个线程一次执行完的代码存储到同步代码块中

 

 

 

同步代码块是用于封装代码,而函数也是用来封装代码的,所不同之处是同步带有锁机制

在函数上加上一个关键字synchronized修饰,那么这个函数就是同步函数,具备同步的特性,效果跟同步代码块是一样的

 

 

同步函数使用的到底是哪个锁?

同步函数使用的锁是this(当前本类对象)

 

同步函数和同步代码块的区别:

       同步代码块使用的锁可以是任意对象

       同步函数使用的锁是固定对象this(当前本类对象)

 

所以一般定义同步时,建议使用同步代码块,当然,如果对象可以使用this,

那么可以简化同步函数的形式

转载于:https://www.cnblogs.com/wzhBlog/archive/2013/04/12/3017284.html

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

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

相关文章

pygame写游戏,常用代码记录

2019独角兽企业重金招聘Python工程师标准>>> pygame 写起游戏来还是挺不错的,不过我也没用过别的什么东西写,所以也没什么发言权。 些游戏我是从这篇文章开始入门的13岁天才儿童教你写游戏 下面是一些常用的代码片段,记录下来&…

每天一个linxu命令6之jps  查看java进程的端口

jps -- Java Virtual Machine Process Status Tool 可以列出本机所有Java进程的pid jps [ options ] [ hostid ] 选项 -q 仅输出VM标识符,不包括class name,jar name,arguments in main method -m 输出main method的参数 -l 输出完全的包名,应用主类名&…

聊聊 C++ 中几类特殊成员函数

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

poj2975——Caesar密码

原题: Description 据说最早的 密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文…

有趣的面试题

MR找共同朋友,数据格式如下: A B C D E F B A C D E C A B E D A B E E A B C D F A 第一字母表示本人,其他是他的朋友,找出有共同朋友的人,和共同朋友是谁 1 import java.io.IOException;2 import java.util.Set;3 im…

mysql 数据库定时备份 增量/全备份

echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFilecd $BakDir/daily/bin/rm -f * 2)增量备份脚本(脚本中mysql的数据存放路径是/home/mysql/data,具体根据自己的实际情况进行调整)[roottest-huanqiu ~]# vim /root…

【 Grey Hack 】万金油脚本:路由器漏洞检测

目录脚本源码用法效果及示例版本&#xff1a;Grey Hack v0.7.3618 - Alpha 脚本源码 if params.len ! 2 or params[0] "-h" or params[0] "--help" then exit("<b>Usage: "program_path.split("/")[-1]" [ip_address] […

中小企业ERP实施的项目管理

目前&#xff0c;我国正在大力推行企业信息化建设&#xff0c;作为一种包含了现代管理思想的ERP(Enterprise Resource Planning)系统日益成为现代企业业务运作的主要工具&#xff0c;为了提升管理水平&#xff0c;提升企业竞争力&#xff0c;在一些实力较强的企业纷纷导入ERP之…

Java开发学习(十一)----基于注解开发bean作用范围与生命周期管理

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

leetcode------Subsets

标题&#xff1a;Subsets通过率&#xff1a;28.2%难度&#xff1a;中等Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be in non-descending order.The solution set must not contain duplicate subsets.For example,I…

动规(LIS)-POJ-2533

http://poj.org/problem?id2533 Longest Ordered Subsequence 给定&#xff4e;个正整数&#xff0c;求最长上升子序列&#xff08;LIS&#xff09;长度&#xff08;子序列中的元素不要求连续&#xff09;. 解题报告 思路 经典的LIS问题&#xff0c;O(n^2)的朴素做法不多作介绍…

【 Grey Hack 】万金油脚本:从路由器获取Password

目录脚本源码用法效果及示例版本&#xff1a;Grey Hack v0.7.3618 - Alpha 脚本源码 if params.len ! 2 or params[0] "-h" or params[0] "--help" then exit("<b>Usage: "program_path.split("/")[-1]" [ip_address] […

Java的注解机制——Spring自动装配的实现原理

JDK1.5加入了对注解机制的支持&#xff0c;实际上我学习Java的时候就已经使用JDK1.6了&#xff0c;而且除了Override和SuppressWarnings(后者还是IDE给生成的……)之外没接触过其他的。 进入公司前的面试&#xff0c;技术人员就问了我关于注解的问题&#xff0c;我就说可以生成…

【一知半解】AQS

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

CentOS下Samba文件服务器的安装与配置

前言&#xff1a;文件服务器提供的服务在大多数公司或企业都会被用到&#xff0c;因为在任何的公司或企业都涉及不同职位获取不同资源文件的情况&#xff0c;这就需要根据不同职位配置相关的不同权限&#xff0c;以保证相关资源文件的安全性和保密性。一、Samba介绍&#xff1a…

Java基础软件的安装及配置及Javascript的运行

1.Jdk的安装及环境变量配置&#xff1a; &#xff08;1&#xff09;计算机-属性-高级系统设置。 &#xff08;2&#xff09;环境变量-系统变量-输入变量名JAVA_HOME-输入变量值C:\Program Files (x86)\Java\jdk1.7.0_79&#xff08;jdk安装路径&#xff09; &#xff08;3&…

【 Grey Hack 】万金油脚本:在路由器上获取shell

目录脚本源码用法效果及示例版本&#xff1a;Grey Hack v0.7.3618 - Alpha 脚本源码 if params.len ! 2 or params[0] "-h" or params[0] "--help" then exit("<b>Usage: "program_path.split("/")[-1]" [ip_address] […

Python进程管理神器——Supervisor

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Web API核查表:设计、测试、发布API时需思考的43件事

当设计、测试或发布一个新的Web API时&#xff0c;你是在一个原有的复杂系统上构建新的系统。那么至少&#xff0c;你也要建立在HTTP上&#xff0c;而HTTP则是基于TCP/IP创建的、TCP/IP建立在一系列的管道上。当然&#xff0c;你也需要考虑Web服务器、应用程序框架或者是API框架…

[JSOI2007]文本生成器

1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBhttp://www.lydsy.com/JudgeOnline/problem.php?id1030Description JSOI交给队员ZYX一个任务&#xff0c;编制一个称之为“文本生成器”的电脑软件&#xff1a;该软件的使用者是一些低幼人群&#xff0c;他…