`

synchronized的作用(四)

    博客分类:
  • j2se
阅读更多
注意:
1、用synchronized 来锁定一个对象的时候,如果这个对象在锁定代码段中被修改了,则这个锁也就消失了。看下面的实例:

目标类:

public class TestThread {
     private static final class TestThreadHolder {
            private static TestThread theSingleton = new TestThread();
            public static TestThread getSingleton() {
                return theSingleton;
              }
            private TestThreadHolder() {
              }
          }
     
    private Vector ve =null;
    private Object lock=new Object();
    private TestThread(){
          ve=new Vector();
          initialize();
      }
    public static TestThread getInstance(){
        return TestThreadHolder.getSingleton();
      }
    private void initialize(){
        for(int i=0;i<100;i++){
              ve.add(String.valueOf(i));
          }
      }
    public void reload(){
        synchronized(lock){
              ve=null;            
              ve=new Vector();
                        //lock="abc"; 
            for(int i=0;i<100;i++){
                  ve.add(String.valueOf(i));
              }
          }
          System.out.println("reload end");
      }
    
    public boolean checkValid(String str){
        synchronized(lock){
              System.out.println(ve.size());
            return ve.contains(str);
          }
      }
}
说明:在reload和checkValid方法中都增加了synchronized关键字,对lock对象进行加锁。在不同线程中对同一个对象实例分别调用reload和checkValid方法。
在reload方法中,不修改lock对象即注释lock="abc"; ,结果在控制台输出reload end后才输出100。说明是同步调用的。
如果在reload方法中修改lock对象即去掉注释,结果首先输出了一个数字(当前ve的大小),然后输出reload end。说明是异步调用的。

2、单例模式中对多线程的考虑
分享到:
评论

相关推荐

    Java多线程和并发知识整理

    四、volatile 详解 4.1 作用 4.2 实现原理 4.3 应用场景 五、final 详解 5.1 基础 5.2 重排序规则 5.3 扩展 六、JUC 6.1 汇总 6.2 Lock框架和Tools类 6.3 并发集合 6.4 原子类 6.5 线程池 七、...

    高级开发并发面试题和答案.pdf

    回答的要点四个: Thread.sleep()和LockSupport.park()的区别 Object.wait()和LockSupport.park()的区别 线程和线程池 线程池的五种状态 线程池类型 线程池原理 线程池构造函数参数; 线程池的4种拒绝策略; 线程池...

    Java面试题.docx

    内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、Serializable 和Parcelable 的区别 8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 9、成员内部类、静态内部类、...

    变态级JAVA程序员面试32问

    第一,谈谈final, finally, finalize的区别。  第二,Anonymous Inner Class ... 第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?  第三十二,编程题: 写一个Singleton出来。

    史上最全java面试,103项重点知识,带目录

    四、反射 23 57. 什么是反射? 23 58. 什么是 java 序列化?什么情况下需要序列化? 23 59. 动态代理是什么?有哪些应用? 23 60. 怎么实现动态代理? 24 五、对象拷贝 24 61. 为什么要使用克隆? 24 62. 如何实现...

    java面试题进阶版附答案.docx

    三、线程同步和互斥锁:解释了线程同步的概念,以及互斥锁的作用,包括使用synchronized关键字和Lock接口实现线程同步的方式。 四、反射机制:解释了Java中的反射机制,包括在运行时动态获取类的信息,操作类的属性...

    JAVA面试题 对JAVA面试有帮助!

    找工作要面试,有面试就有对付面试的办法。以下一些题目来自我和我... 第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?  第三十二,编程题:写一个Singleton出来。  下面是答案

    Java进阶教程解密JVM视频教程

    JVM 内存结构的组成、各部分功能作用,学会利用内存诊断工具排查内存相关问题;2. JVM 的招牌功能-垃圾回收机制是如何工作的,如何进行垃圾回收调优;3. Java 程序从编译为字节码到加载到运行的全流程,各个阶段的...

    Java常见面试题208道.docx

    4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i...

    JAVA面试题最全集

    如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何...

    JAVA多线程技术分享-39页PPT(winding)

    1,Thread.sleep(0)的作用 2,为什么线程会带来性能问题 3,线程停止打断 4,守护线程 二 锁: 1,乐观锁 悲观锁 2,自旋锁 适应性自旋锁 3,synchronized 锁升级 4,公平锁 非公平锁 5,可重入锁 非可重入锁 三: ...

    java基础题 很全面

    33. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 11 34. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 11 35. 两个...

    千方百计笔试题大全

    181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? ...

    java面试宝典

    181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? ...

    超级有影响力霸气的Java面试题大全文档

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【WEB】JSP中的四种作用域 38 【WEB】转发(forward)和重定向(redirect)的区别 38 forward(转发): 38 redirect(重定向): 39 区别: 39 【WEB】实现会话跟踪的技术有哪些? 40 【WEB】什么是ORM 42 【反射】...

    java 面试题 总结

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    java面试题

    36. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 18 37. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 18 38. 比较truncate和delete 命令 18 39. 解释$ORACLE_...

    Java面试宝典2010版

    四. Java web部分 1、Tomcat的优化经验 2、HTTP请求的GET与POST方式的区别 3、解释一下什么是servlet; 4、说一说Servlet的生命周期? 5、Servlet的基本架构 6、SERVLET API中forward() 与redirect()的区别? 86...

    最新Java面试宝典pdf版

    四. Java web部分 85 1、Tomcat的优化经验 85 2、HTTP请求的GET与POST方式的区别 85 3、解释一下什么是servlet; 85 4、说一说Servlet的生命周期? 86 5、Servlet的基本架构 86 6、SERVLET API中forward() 与redirect...

Global site tag (gtag.js) - Google Analytics