`
Josh_Persistence
  • 浏览: 1661176 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Java Synchorinzed注意事项

阅读更多
Thread中的join方法的作用就是使线程从异步执行变成同步执行。
 

1. 在使用synchronized块时应注意,synchronized块只能使用对象作为它的参数。如果是简单类型的变量(如int、char、boolean等),不能使用synchronized来同步。


2、要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下:
public synchronized void run() {
 
}
 
3、对于静态方法来说,只要加上了synchronized关键字,这个方法就是同步的,所以无论是使用对象.method(),还是使用类.method()来调用method方法,method都是同步的,并不存在非静态方法的多个实例问题。
 
4、synchronized关键字不能继承(不属于方法的一部分)
 
5、在定义接口方法时不能使用synchronized关键字。
 
6、构造方法不能使用synchronized关键字,但可以使用synchronized块来进行同步。
 
7、synchronized可以自由放置。
 
8、synchronized关键字只能用来同步方法,不能用来同步变量。
 
9、从表面上看synchronized锁定的是一个方法,但实际上synchronized锁定的是一个类。也就是说,如果在非静态方法method1和method2定义时都使用了synchronized,在method1未执行完之前,method2是不能执行的。静态方法和非静态方法的情况类似,但静态和非静态方法不会互相影响。
 
10、如果在类中使用synchronized关键字来定义非静态方法,那将影响这个类中的所有使用synchronized关键字定义的非静态方法。如果定义的是静态方法,那么将影响类中所有使用synchronized关键字定义的静态方法。这有点像数据库表中的表锁,当修改一条记录时,系统就将整个表都锁住了,因此,大量使用这种同步方式会使程序的性能大幅下降。
 
11、如果想使用synchronized块来锁定类中所有的同步非静态方法,需要使用this作为synchronized块的参数传入synchronized块中。
 
12、Synchronized块不管是正常执行完,还是因为程序出错而异常退出synchronized块,当前的sychronized块所持有的同步锁会自动释放。因此,在使用synchronized块时不必担心同步锁的释放问题。
 
13、在使用synchronized块同步类方法时,非静态方法可以使用this同步,而静态方法必须使用Class对象来同步。它们互不影响。当然,也可以在非静态方法中使用Class对象来同步静态方法。但在静态方法中不能使用this来同步非静态方法(因为在调用静态方法时,对象实例不一定被创建)。

 

1
0
分享到:
评论

相关推荐

    Java开发注意事项

    在深入探讨Java开发注意事项之前,我们首先应当澄清,给定的部分内容似乎包含了非文本或乱码信息,这可能源于文档转换或编码问题。不过,基于标题“Java开发注意事项”及描述“Java开发注意事项,编程人员可以看看哦...

    JAVA开发规范,开发注意事项

    在Java开发过程中,遵循一套规范和注意事项至关重要,它不仅能提高代码的可读性和维护性,还能确保团队间的协作效率。以下是一些核心的Java开发规范和需要注意的事项: 1. **命名规范**: - 类名:使用驼峰式命名...

    java编程注意事项.chm(电子书格式)

    java编程注意事项.chm(电子书格式),摘录精编版。很有帮助!

    Java面试应注意事项2.doc.zip

    Java面试应注意事项

    java web的注意事项

    getWriter() 和Response.getOutputStream冲突

    Java基础之数组的注意事项

    Java基础之数组的注意事项

    Java继承以及函数的特点和注意事项

    Java继承以及函数的特点和注意事项

    JAVA多线程的使用场景与注意事项总结

    JAVA多线程的使用场景与注意事项总结 Java多线程是Java语言中的一种重要机制,允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在Java中,多线程可以通过继承Thread类、实现Runnable接口或使用线程池来...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    **注意事项:** - 调整JVM参数时需谨慎,过大的堆可能会导致其他问题,如GC停顿时间增加。 - 应用程序设计时应考虑到资源的有效利用,避免无谓的内存消耗。 #### 示例案例 假设一个使用Eclipse开发的项目在进行全...

    在学习GUI时,所涉及到的一些方法的总结

    GUI用到的一些方法,何其注意事项,还有一些零碎的知识点的总结。比如有 getText()方法来获取文本,setText()方法来设置文本内容

    java获取当前windows进程pid

    注意事项:不能改变PidTool.java所在的包,否则需要重行生成dll。 编译命令中 "-PidTool.dll" 改为 "-FePidTool.dll",我整漏了! 使用方法: 1.javac PidTool.java 2.javah -jni PidTool ,生成.h头文件 3.编写.c...

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    一些大佬的经典Java简历及真实项目及个人技能和职责经典描述案例参考

    分享一些大佬的经典简历(阿里P7简历+12年老程序员简历)共10份,分别是不同工作年限的,以及《写简历应注意事项汇总.pdf》等资源内容。1、简历是面试的敲门砖,好的简历让HR和面试官眼前一亮,从而让你有了面试的...

    VB.NET转JAVA工具

    说明文档通常会包含如何使用工具的步骤、转换的限制和注意事项,以及可能遇到的问题及解决办法。源代码分析可以帮助开发者理解转换算法,对于高级用户来说,甚至可以自定义或扩展转换规则以适应特定需求。 总的来说...

    Java2Pas Java代码转pas代码

    使用Java2Pas时,开发者需要注意的是,自动转换的代码可能需要进一步的手动调整才能完全符合目标语言的规范和最佳实践。自动转换工具虽然能提供一个良好的起点,但不能替代人工审查和优化。此外,如果Java代码中包含...

    Java 6.0 完整安装版

    `下载说明.txt`很可能是包含了安装或使用Java 6.0的一些指南和注意事项,对于初学者或者遇到问题的用户来说,这个文件非常有用。`理想导航.url`则可能是一个快捷方式,指向一个与Java学习或者资源相关的网站。 Java...

    中控Java二次开发demo

    7. **注意事项**:在进行二次开发时,需要注意兼容性问题,确保所使用的Java版本和SDK版本相匹配。同时,安全性和稳定性是开发的重点,避免出现数据泄露或系统崩溃的情况。 总之,"中控Java二次开发demo"是一个宝贵...

    JAVA API官方中文版手册chm文件文档

    JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.im.spi java.awt.image ...

    JAVA语音转文字

    6. **注意事项** - 语音识别的准确度受多种因素影响,包括音质、口音、背景噪音等,因此在实际应用中可能需要进行一些预处理和后处理步骤来优化结果。 - 考虑到隐私问题,使用云服务时要确保符合数据保护法规。 -...

    java转js工具

    Java到JavaScript转换工具有助于开发者将已有的Java代码库移植到JavaScript环境中,这在Web开发中尤其有用,因为JavaScript是浏览器端的...然而,使用时需要注意语言特性的差异,以及转换过程中可能出现的问题和挑战。

Global site tag (gtag.js) - Google Analytics