synchronized 的理解

第一种:package com.ucmed.zsyy.util;
/**
* Created by ucmed on 2017/2/8.
*/
public class DirtyRead {
private String username = "zjkj";
private String password = "123";
public synchronized void setValue(String username, String password) {
System.out.println("set线程:" + Thread.currentThread().getPriority());
this.username = username;
try {
Thread.sleep(2000);
} catch(InterruptedException e) {
e.printStackTrace();
}
this.password = password;
System.out.println("setValue最终结果:username = " + username + "  , password = " + password);
}
public void getValue() {
System.out.println("get线程:" + Thread.currentThread().getPriority());
System.out.println("getValue最终结果:username = " + username + "  , password = " + password);
}
public static void main(String[] args) throws InterruptedException {
final DirtyRead dr = new DirtyRead();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
dr.setValue("z3", "456");
}
});
System.out.println("主线程:" + Thread.currentThread().getPriority());
t1.start();
Thread.sleep(1000);
dr.getValue();
}
}
第二种:
package com.ucmed.zsyy.util;
/**
* Created by ucmed on 2017/2/8.
*/
public class DirtyRead {
private String username = "zjkj";
private String password = "123";
public synchronized void setValue(String username, String password) {
System.out.println("set线程:" + Thread.currentThread().getPriority());
this.username = username;
try {
Thread.sleep(2000);
} catch(InterruptedException e) {
e.printStackTrace();
}
this.password = password;
System.out.println("setValue最终结果:username = " + username + "  , password = " + password);
}
public synchronized void getValue() {
System.out.println("get线程:" + Thread.currentThread().getPriority());
System.out.println("getValue最终结果:username = " + username + "  , password = " + password);
}
public static void main(String[] args) throws InterruptedException {
final DirtyRead dr = new DirtyRead();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
dr.setValue("z3", "456");
}
});
System.out.println("主线程:" + Thread.currentThread().getPriority());
t1.start();
Thread.sleep(1000);
dr.getValue();
}
}
理解:
这里只有一个对象,一个对象的多个synchronized修饰的方法的情况
上面例子是当get方法加上锁后,要等待set方法执行完后再执行
在方法上加synchronized关键字,持有的锁为当前对象,当一个线程调用了其中一个synchronized的方法后,其他线程再调用该类中其他synchronized修饰的方法会挂起等待,需要等上一个线程执行完,释放锁后,其他调用线程取得锁后才会执行
不是多个锁,是多个synchronized修饰的方法..这些方法是同一个锁

转载于:https://www.cnblogs.com/heqiang/p/6386122.html

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

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

相关文章

机器学习之提升算法

1、知道提升、梯度提升是什么意思1.1、提升1.2、梯度提升1.3、了解提升算法的过程 2、残差与残差平方和(residual sum of squares)3、了解GBDT算法4、了解XGBoost算法5、了解Adaboost算法5.1、Adaboost算法的原理5.2、例子 6、偏差和方差 1、知道提升、梯…

Jsoup遍历ul li下的链接信息实例

2019独角兽企业重金招聘Python工程师标准>>> Document doc;try {String URL "www.baidu.com";doc Jsoup.connect(URL).get();Elements ElementsUl doc.getElementsByTag("ul");for (Element elementLi : ElementsUl) {Elements provinceEl …

两篇波兰地区重金属污染地区土壤微生物多样性的研究

环境微生物(包括方兴未艾的肠道微生物)在不同的系统中发挥着的生态作用逐渐被意识到,我们对环境微生物实际上仍旧知之甚少,其多样性问题仍旧是一个非常基础和重要的课题。这次读的两篇文章都是关于波兰地区重金属污染地区的土壤微…

jquery中的 $(function(){})

$(function(){})的区别:$(function(){}) 是 $(document).ready(function(){}) 的简写,用来在DOM加载完成之后执行一系列预先定义好的函数。 需要注意与(function(){})相比,(function(){})表示一个匿名函数。function(arg){...}定义了一个参数…

机器学习之支持向量机(SVM)总结

文章目录1、知道SVM相关的各种概念2、知道目标函数、损失函数、正则项的意义2.1、目标函数2.2、损失函数2.3、正则化(添加噪音避免过拟合)3、了解SVM算法原理4、知道SVM的目标函数5、知道SVM的损失函数以及公式6、知道SVM支持向量机的计算过程6.1、推导过…

在CentOS上搭建PHP服务器环境

您也可以使用一键自动部署环境的工具,请参见网友开发的这个工具 http://www.centos.bz/2013/08/ezhttp-tutorial/安装apache:yum install httpd httpd-devel 启动apache:/etc/init.d/httpd start此时输入服务器的IP地址,应该看到apache的服务页面&#x…

jQuery之滚动事件$(window).scroll(function()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>滚动事件</title><script src"https://code.jquery.com/jquery-2.2.4.min.js"></script><style>img{position:fixe…

《疯狂Java讲义》(二十九)---- JDBC

JDBC编程步骤加载数据库驱动Class.forName(driverClass). 例如&#xff1a;Class.forName("oracle.jdbc.driver.OracleDriver"); 2. 通过DriverManager获取数据库连接。 DriverManager.getConnection(String url, String user, String pwd); 3. 通过Connection对象创…

机器学习之聚类算法的原理推导及相关知识总结

文章目录1、知道几个关于"差"的概念2、理解相似度度量的各种方法和相互关系2.1、欧氏距离2.2、jaccard相似系数2.3、余弦相似度2.4、Pearson相似系数2.5、相对熵3、掌握掌握K-Means算法3.1、知道聚类的思想3.2、K-Means算法原理3.3、知道K-Mediods聚类3.4、如何选取K…

Flex 布局教程:语法

Java数组声明的三种方式 第一种(声明并初始化)&#xff1a; 数据类型[] 数组名{值,值,...}; 例&#xff1a;int[] a {1,2,3,4,5,6,7,8}; 第二种(声明后赋值)&#xff1a; 数据类型[] 数组名 new 数据类型[数组长度]; 数组名[下标1]值…

注意:匿名函数调用直接加载函数名setInterval(move,30)

setInterval要求第一个参数必须是含Javascript命令的字符串或函数对象&#xff0c;所以 setInterval("move()",300) 以及 setInterval(move,300) 这两个都是正确的。 而 setInterval(move(),300) 当Javascript运行到这个语句时&#xff0c;会立即执行move这个函数&am…

vue import组件的使用

vue import组件的使用 1新建/src/component/firstcomponent.vue <template><div id"firstcomponent"><h1>I am a title.</h1></div> </template>2在app.vue引入组件 并且注册 <script> import firstcomponent from ./comp…

牵丝戏

余少能视鬼&#xff0c;尝于雪夜野寺逢一提傀儡翁&#xff0c;鹤发褴褛&#xff0c;唯持一木偶制作极精&#xff0c;宛如娇女&#xff0c;绘珠泪盈睫&#xff0c;惹人见怜。 时云彤雪狂&#xff0c;二人比肩向火&#xff0c;翁自述曰&#xff1a;少时好观牵丝戏&#xff0c;耽…

机器学习之EM算法的原理推导及相关知识总结

文章目录1、知道先验概率和后验概率2、了解高斯混合模型GMM3、通过最大似然估计推导EM算法的过程的实例4、EM算法5、知道pLSA模型1、知道先验概率和后验概率 先验概率&#xff08;prior probability&#xff09;是指根据以往经验和分析得到的概率&#xff08;理解为自定义概率…

jQuery中的on 和事件委派

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件</title><style>p{width:100px;height:100px;border: 1px solid gray;}</style><script src"https://code.jquery.com/…

python pip处理

查看pip 版本号 pip --version 升级方法 on linux or os X: pip install -U pip on windows: python -m pip install -U pip 转载于:https://www.cnblogs.com/yangwithtao/p/6397114.html

js中innerHTML和innerText jQuery中html()和text()的区别

js中innerHTML和innerText的区别innerHTML innerHTML 会将标签和标签中的内容否获取回来 innerHTML .innerHTML ‘<p></p>’; 只会将文本内容解析出来&#xff0c;不会显示标签innerText innerText 只会将标签中的内容获取回来&#xff0c;不会获取标签 innerT…

ECMAScript 6 -- let和const命令

ES6新增了let命令&#xff0c;用来声明变量。它的用法类似于var&#xff0c;但是所声明的变量&#xff0c;只在let命令所在的代码块内有效。 for (let i 0; i < 10; i) {console.log(i);} 可以执行 for (let i 0; i < 10; i) {}console.log(i); 就会报错 ncaught Refer…

机器学习之朴素贝叶斯算法的推理及相关知识总结

文章目录1、朴素贝叶斯公式1.1、贝叶斯公式的应用2、了解贝叶斯网络2.1、知道什么是贝叶斯网络2.2、贝叶斯网络的两种表示形式2.3、掌握全连接的贝叶斯网络的公式2.3、知道条件概率表参数个数分析的方法2.4、掌握变量联合分布概率的公式及含义2.5、知道马尔科夫模型3、了解D-se…

mysql之外键

外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦 …