java synchronized 参数_java – 将参数传递给synchronized块的目的是什么?
我知道
When you synchronize a block of code, you specify which object’s lock
you want to use as the lock, so you could, for example, use some
third-party object as the lock for this piece of code. That gives you
the ability to have more than one lock for code synchronization within
a single object.
但是,我不明白需要将参数传递给块.因为我是否传递String的实例并不重要,无论传递给块的参数如何,作为同步块的同步块的一些随机类的实例都能正常工作.
所以我的问题是,如果无论如何同步块阻止两个线程同时进入临界区.那么为什么需要传递一个论点呢? (我的意思是默认获取某些随机对象的锁定).
我希望我正确地提出了我的问题.
我尝试了以下示例,随机参数是同步块.
public class Launcher {
public static void main(String[] args) {
AccountOperations accOps=new AccountOperations();
Thread lucy=new Thread(accOps,"Lucy");
Thread sam=new Thread(accOps,"Sam");
lucy.start();
sam.start();
}
}
使用非静态同步块:
public class AccountOperations implements Runnable{
private Account account = new Account();
public void run(){
for(int i=0;i<5;i++){
makeWithdrawal(10);
}
}
public void makeWithdrawal(int amount){
String str="asd"
synchronized (str /* pass any non-null object the synchronized block works*/) {
if(account.getAmount()>10){
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
account.withdraw(amount);
System.out.println(Thread.currentThread().getName()+" has withdrawn 10, current balance "+ account.getAmount());
}else{
System.out.println("Insufficient funds "+account.getAmount());
}
}
}
}
使用静态同步块:
public class AccountOperations implements Runnable{
private static Account account = new Account();
public void run(){
for(int i=0;i<5;i++){
makeWithdrawal(10);
}
}
public static void makeWithdrawal(int amount){
synchronized (String.class /* pass any class literal synchronized block works*/) {
if(account.getAmount()>10){
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
account.withdraw(amount);
System.out.println(Thread.currentThread().getName()+" has withdrawn 10, current balance "+ account.getAmount());
}else{
System.out.println("Insufficient funds "+account.getAmount());
}
}
}
}
java synchronized 参数_java – 将参数传递给synchronized块的目的是什么?相关推荐
- java 什么是参数_java中参数是什么?
java中参数是什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中参数是什么? 参数分为实参和形参.方法名 ...
- java启动参数_Java启动参数的思考
1. -XX:+DisableExplicitGC Java在实现RMI Server的时候会通过定时的调System.gc来强制做GC(即使程序里没用到RMI也会被启动),这个动作非常烦人,另外也是 ...
- java+list可变参数_Java 可变参数
众所周知, Java可以通过... 来给一个方法定义一个可变长度的参数. 例如 // 返回可变参数的个数 public void method(int ... i){ System.out.print ...
- java变长参数_Java可变长度参数
术语"varargs"是"variable-length arguments"(可变长度参数)的缩写. 可变长度参数声明一个接受可变数量的参数(或参数)的方法或 ...
- 【Java代码】反射机制处理传递给mapper文件的非Map类型参数对象(指定属性为空则设置默认值)
1. why 为什么要拦截传递给 mapper 文件的参数对象呢?因为要对指定属性设置默认值.如何拦截传递给 mapper 文件的参数对象可以参考<使用(org.apache.ibatis.pl ...
- java 线程由浅入深_Java多线程:由浅入深看synchronized的底层实现原理
Java多线程:由浅入深看synchronized的底层实现原理-1.jpg (91.72 KB, 下载次数: 0) 2018-9-21 03:55 上传 前言 前俩篇文章,我们聊了聊线程/进程的概念 ...
- java反射传递参数_Java反射 调用传参
//测试方法 @Test public void test01() { Class p = null; Person01 person01 = new Person01(); try { p = Cl ...
- java方法的参数_Java方法参数
Java方法参数 在程序设计语言中如何将参数传给方法(或函数): 按值调用:方法接受的是调用者提供的值 按引用调用:方法接受的是调用者提供的地址 Java程序设计语言总是采用按值调用(方法得到的是所有 ...
- java 接口校验接收参数_java接口参数校验
(可扩充) 命令编号 命令名称 参数命令 提取现场机时间 上传现场机时间 设置现... 接口标准> (以下简称"接口标准" ) <数据对接接口校验规则> < ...
最新文章
- 动态规划 - 买卖股票的最佳时机 IV
- ubuntu 安装cmake
- (8)FPGA实现1s闪灯代码(学无止境)
- [20] 鼓状物(Drum)图形的生成算法
- 电梯设计需求调研报告
- java从入门到精通一(java开发入门)
- 稀疏表示与字典学习大略讲解
- 图书自助借阅功能分析
- oracle静默安装集群,Oracle RAC 静默安装实践
- Nvidia NX平台控制台调试串口修改调试记录
- 《矩阵理论与方法》lambda矩阵及Jordan标准形
- 清华大学转到计算机专业一年几个,计算机专业(转).doc
- jenkins pipeline php,Jenkins + Pipeline 构建自动化发布
- Acwing LeetCode 题目分类——配套基础课进阶课
- 苹果手机home键在哪里_苹果手机为什么没有返回键? 原来隐藏着更好的方法, 涨知识了...
- 【存储过程造数mysql】
- IE浏览器快速切换各个版本
- springboot2.7.X+es8 集成开发
- MQ-2烟雾传感器模块功能实现(STM32)
- 转-Linux下装飞秋