博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(三)多线程下的单例的几种方式
阅读量:6311 次
发布时间:2019-06-22

本文共 2259 字,大约阅读时间需要 7 分钟。

都是通过例子来介绍

1.饿汉单例(简单的说就是一上来就创建对象)

先创建一个单例的类MySingleton

package demo01;/** * Created by mycom on 2018/3/6. */public class MySingleton {    private static MySingleton instance = new MySingleton();    private MySingleton(){}    public static MySingleton getInstance() {        return instance;    }}

在编写线程类,并且测试

package demo01;/** * Created by mycom on 2018/3/6. */public class MyThread extends Thread {    @Override    public void run() {        System.out.println(MySingleton.getInstance().hashCode());    }    public static void main(String[] args) {        MyThread[] mts = new MyThread[10];        for(int i = 0 ; i < mts.length ; i++){            mts[i] = new MyThread();        }        for (int j = 0; j < mts.length; j++) {            mts[j].start();        }    }}

如果运行的结果所有的都是一样的,说明实验成功,

2.懒汉单例(用到的时候才会创建对象)

线程安全的---方法中声明synchronized关键字

package demo01;/** * Created by mycom on 2018/3/6. */public class MySingleton {    private static MySingleton instance = null;    private MySingleton(){}    public synchronized static MySingleton getInstance() {        try {            if(instance != null){
//懒汉式 }else{ //创建实例之前可能会有一些准备性的耗时工作 Thread.sleep(300); instance = new MySingleton(); } } catch (InterruptedException e) { e.printStackTrace(); } return instance; }}
package demo01;/** * Created by mycom on 2018/3/6. */public class MyThread extends Thread {    @Override    public void run() {        System.out.println(MySingleton.getInstance().hashCode());    }    public static void main(String[] args) {        MyThread[] mts = new MyThread[10];        for(int i = 0 ; i < mts.length ; i++){            mts[i] = new MyThread();        }        for (int j = 0; j < mts.length; j++) {            mts[j].start();        }    }}

3.使用静态内置类实现单例模式(对上面MySingleton的代码进行改动)

package demo01;/** * Created by mycom on 2018/3/6. */public class MySingleton {    //内部类    private static class MySingletonHandler{        private static MySingleton instance = new MySingleton();    }    private MySingleton(){}    public static MySingleton getInstance() {        return MySingletonHandler.instance;    }}

测试结果

。。。。。。。

 

转载于:https://www.cnblogs.com/my-123/p/8512313.html

你可能感兴趣的文章
把Java程序打包成jar文件包并执行
查看>>
Meta标签实现阻止移动设备(手机、Pad)的浏览器双击放大网页
查看>>
创业公司常用服务
查看>>
深入理解和探究Java类加载机制
查看>>
Portal for ArcGIS 资源承载数据类型
查看>>
技术开发人员适应其他部门提需求的一个经验
查看>>
百度索引量是什么意思?怎么提高索引量?
查看>>
IE10 IE11 中 网站无法登录问题cookie
查看>>
HTTP Status Codes
查看>>
WPF在XAML中Binding使用StringFormat属性
查看>>
Bootstrap的学习以及简单运用
查看>>
论文笔记之: Hierarchical Convolutional Features for Visual Tracking
查看>>
[数分提高]2014-2015-2第2教学周第1次课
查看>>
JavaScript 正则表达式
查看>>
HA模式手动切换namenode状态
查看>>
技术性能领先,阿里云网络产品全面升级为企业级
查看>>
从源码解析ERROR 1129 (HY000):Host is blocked because of many connection errors
查看>>
深入解析:由SQL解析失败看开发与DBA的性能之争
查看>>
MySQL第三方客户端工具
查看>>
Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE
查看>>