我知道

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块的目的是什么?相关推荐

  1. java 什么是参数_java中参数是什么?

    java中参数是什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中参数是什么? 参数分为实参和形参.方法名 ...

  2. java启动参数_Java启动参数的思考

    1. -XX:+DisableExplicitGC Java在实现RMI Server的时候会通过定时的调System.gc来强制做GC(即使程序里没用到RMI也会被启动),这个动作非常烦人,另外也是 ...

  3. java+list可变参数_Java 可变参数

    众所周知, Java可以通过... 来给一个方法定义一个可变长度的参数. 例如 // 返回可变参数的个数 public void method(int ... i){ System.out.print ...

  4. java变长参数_Java可变长度参数

    术语"varargs"是"variable-length arguments"(可变长度参数)的缩写. 可变长度参数声明一个接受可变数量的参数(或参数)的方法或 ...

  5. 【Java代码】反射机制处理传递给mapper文件的非Map类型参数对象(指定属性为空则设置默认值)

    1. why 为什么要拦截传递给 mapper 文件的参数对象呢?因为要对指定属性设置默认值.如何拦截传递给 mapper 文件的参数对象可以参考<使用(org.apache.ibatis.pl ...

  6. java 线程由浅入深_Java多线程:由浅入深看synchronized的底层实现原理

    Java多线程:由浅入深看synchronized的底层实现原理-1.jpg (91.72 KB, 下载次数: 0) 2018-9-21 03:55 上传 前言 前俩篇文章,我们聊了聊线程/进程的概念 ...

  7. java反射传递参数_Java反射 调用传参

    //测试方法 @Test public void test01() { Class p = null; Person01 person01 = new Person01(); try { p = Cl ...

  8. java方法的参数_Java方法参数

    Java方法参数 在程序设计语言中如何将参数传给方法(或函数): 按值调用:方法接受的是调用者提供的值 按引用调用:方法接受的是调用者提供的地址 Java程序设计语言总是采用按值调用(方法得到的是所有 ...

  9. java 接口校验接收参数_java接口参数校验

    (可扩充) 命令编号 命令名称 参数命令 提取现场机时间 上传现场机时间 设置现... 接口标准> (以下简称"接口标准" ) <数据对接接口校验规则> < ...

最新文章

  1. 动态规划 - 买卖股票的最佳时机 IV
  2. ubuntu 安装cmake
  3. (8)FPGA实现1s闪灯代码(学无止境)
  4. [20] 鼓状物(Drum)图形的生成算法
  5. 电梯设计需求调研报告
  6. java从入门到精通一(java开发入门)
  7. 稀疏表示与字典学习大略讲解
  8. 图书自助借阅功能分析
  9. oracle静默安装集群,Oracle RAC 静默安装实践
  10. Nvidia NX平台控制台调试串口修改调试记录
  11. 《矩阵理论与方法》lambda矩阵及Jordan标准形
  12. 清华大学转到计算机专业一年几个,计算机专业(转).doc
  13. jenkins pipeline php,Jenkins + Pipeline 构建自动化发布
  14. Acwing LeetCode 题目分类——配套基础课进阶课
  15. 苹果手机home键在哪里_苹果手机为什么没有返回键? 原来隐藏着更好的方法, 涨知识了...
  16. 【存储过程造数mysql】
  17. IE浏览器快速切换各个版本
  18. springboot2.7.X+es8 集成开发
  19. MQ-2烟雾传感器模块功能实现(STM32)
  20. 转-Linux下装飞秋

热门文章

  1. url解码java_JAVA对URL的解码【转】
  2. 计算机网络故障检测,计算机网络故障常用诊断工具你会多少
  3. 【洛谷1527】 [国家集训队]矩阵乘法(整体二分)
  4. Java学习——基本数据类型
  5. JS魔法堂之实战:纯前端的图片预览
  6. Solrflux源码分析-Sql Support within Solr-类Sql的solr搜索实现(2)
  7. 【mongodb系统学习之十】mongodb查询(二)
  8. SDL 从内存流中加载图像并显示
  9. 业务逻辑?到底是什么
  10. unix/linux命令参考