zoukankan      html  css  js  c++  java
  • 关于单例模式、同步synchronized

    public class SyncObj {    private static SyncObj obj = null;    private SyncObj(){     }    public static SyncObj getIns(){   if(obj==null){    System.out.println("obj=null");    obj = new SyncObj();    return obj;   }   return obj;  }  public synchronized void say(){   System.out.println("hello world..");  } }

    ================================== 在普通的main方法里测,没什么问题 ================================== public static void main(String[] args) {   // TODO Auto-generated method stub   SyncObj obj1 = SyncObj.getIns();   SyncObj obj2 = SyncObj.getIns();   obj1.say();   obj2.say();   System.out.println(obj1);   System.out.println(obj2); obj1、obj2是同一个object

    ==================================== 但是在线程里,就不一定是这样了 ====================================

    --------------------------------- 1.主线程跟子线程都去获得这个实例 --------------------------------- public class MyThread extends Thread{  @Override  public void run() {   super.run();   SyncObj obj1 = SyncObj.getIns();   System.out.println(Thread.currentThread().getName()+":"+obj1);   obj1.say();  }  }

    ----main方法里: public static void main(String[] args) {  SyncObj obj1 = SyncObj.getIns();  System.out.println(Thread.currentThread().getName()+":"+obj1);

     Thread th1 = new MyThread();  Thread th2 = new MyThread();  th1.start();  th2.start(); } ----这个里面obj都是同一个 ----因为主线程里先geIns(),就先初始化了SyncObj里的类变量, ----然后在子线程里得到的是同一个obj,所以SyncObj里的sync方法也有意义

    ------------------------------------ 2.主线程没有获得这个实例,直接开子线程 --也就是说子线程开始前,SyncObj没有没赋值 ------------------------------------ public static void main(String[] args) {  Thread th1 = new MyThread();  Thread th2 = new MyThread();  th1.start();  th2.start(); } ----结果是:********得到2个不同的obj******** ----所以这个SyncObj的sync方法也没有意义!!!

    ==================================================== 改进代码: SyncObj里加上static块: ==================================================== public class SyncObj { static{  if(obj==null){   obj = getIns();  } } 。。。 } ----这样就是得到同一个实例 ----sync的方法才有意义

  • 相关阅读:
    P3387 【模板】缩点 tarjan
    P2831 愤怒的小鸟 状压dp
    交流帖
    P3959 宝藏 模拟退火。。。
    B1060 [ZJOI2007]时态同步 dfs
    P1850 换教室 概率dp
    树链刨分(待修改)
    B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
    B3402 [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
    B5248 [2018多省省队联测]一双木棋 状压dp
  • 原文地址:https://www.cnblogs.com/tomcatandjerry/p/2548186.html
Copyright © 2011-2022 走看看