单例模式和多线程的实例:总结

最近在看 < effective java > 一边看,一遍找源码敲案例,确实有点头疼; 第一章节讲的是对象的创建和销毁 ; 讲了很多关于单例的 内容 . 于是就在想单例和线程的关系. 敲了一段demo .我们通过代码的结果来总结:
single domain 类

public class SingleTest {
    private String name ;
    private final static SingleTest INSTANCE = new SingleTest();
    private SingleTest (){}
    private SingleTest(String name){
        this.name = name;
    }

    public static SingleTest getInstantce(){
        return INSTANCE;
    }
    // 以下get set

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

   /* @Override
    public String toString() {
        return "SingleTest{" +
                "name='" + name + '\'' +
                '}';
    }*/
}

线程A:

public class ThreadA implements Runnable{
    @Override
    public void run() {
        SingleTest instantce = SingleTest.getInstantce();
        System.out.println("Thread_A_Instance : "+instantce);
        instantce.setName("12");

        System.out.println("Threand_A_SetName = "+"12");
    }
}

线程B

public class ThreadB implements Runnable {

    @Override
    public void run() {
        SingleTest instantce = SingleTest.getInstantce();
        System.out.println("Thread_B_Instance : "+instantce);
        System.out.println("Thread_B_GetName = "+instantce.getName());

    }
}

单元测试

    @Test
    public void testInstance(){
        Thread thread = new Thread(new ThreadA());
        Thread thread1 = new Thread(new ThreadB());
        thread.start();
        thread1.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        while (true){

        }
    }

输出:

Thread_A_Instance : com.ding.domain.SingleTest@35060f17
Thread_B_Instance : com.ding.domain.SingleTest@35060f17
Threand_A_SetName = 12
Thread_B_GetName = 12

这边可以说明:

  1. 在系统运行时,单例即使在不同的线程中,也只会有一个对象
  2. 在多个线程中单例对象的数据可以共享.
  3. 在多线程并发时 ,单例对象的性能 ,以及加锁应该在考虑范围之类.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值