单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。

每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

 public class SingletonThread implements Runnable {
private User u = null; public static void main(String[] args) throws InterruptedException {
for(int i=0;i<1000;i++){
SingletonThread t = new SingletonThread();
SingletonThread t1 = new SingletonThread();
Thread t3 = new Thread(t);
Thread t4 = new Thread(t1);
t3.start();
t4.start();
t3.join(0);
t4.join(0);
if(t.getUser()!=t1.getUser())
System.out.println("多线程引起单例创建失败...");
} }
public User getUser() {
return u;
} @Override
public void run() {
try {
u = User.getInstance();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 懒汉式单例--线程不安全
* */
public static class User {
private User() {
} private static User u = null; public static User getInstance() throws InterruptedException {
if (u == null) {
Thread.currentThread().sleep(1000);
System.out.println("threadId:" + Thread.currentThread().getId());
u = new User();
}
return u;
}
}
/*
* 恶汉式单例--线程安全
*
* */
public static class User1 {
private User1() {}
private static User1 u = new User1(); public static User1 getInstance() throws InterruptedException {
Thread.currentThread().sleep(1000);
return u;
}
} }

java懒汉式单例遇到多线程的更多相关文章

  1. Java并发-懒汉式单例设计模式加volatile的原因

    懒汉式单例的double check.例一: class SingletonClass{ private static SingletonClass instance = null; private ...

  2. 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解

    不多说,直接上干货! 什么是单例设计模式? 解决的问题:可以保证一个类在内存中的对象唯一性,必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证? 1.不允许其他程序用new ...

  3. Java中的懒汉式单例与饿汉式单例实例详解

    懒汉式单例:线程非安全,当被调用的时候才创建实例,效率较高 public class LazySingleton { private static LazySingleton lazySingleto ...

  4. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  5. Hi,我们再来聊一聊Java的单例吧(转)

    1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出——但是,真的是这样吗? 作为一个Java开发者,也许你觉得自己对单例 ...

  6. 转 java 类 单例

    转 单例概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一 ...

  7. java设计模式--单例

    GOF23(group of four)---由4个大牛总结的JAVA23种常用的设计模式,归根结底都是为了代码的可扩展性. 设计模式中一种比较重要的思想就是:开闭原则,尽量做到对扩展开放,对修改关闭 ...

  8. 设计模式——懒汉式单例类PK饿汉式单例类

    前言 我们都知道生活中好多小软件,有的支持多IP在线,有的仅仅局限于单个IP在线.为什么这样设计,在软件开发阶段就是,有需求就是发展.这就是软件开发的一个设计模式--懒汉式单例类和饿汉式单例类. 内容 ...

  9. 架构师养成记--6.单例和多线程、ThreadLocal

    一.ThreadLocal 使用wait/notify方式实现的线程安全,性能将受到很大影响.解决方案是用空间换时间,不用锁也能实现线程安全. 来看一个小例子,在线程内的set.get就是thread ...

随机推荐

  1. 【转】Eclipse+PyDev 安装和配置

    原文网址:http://www.51testing.com/html/67/589567-866611.html Python开发有很多工具,其中Eclipse+Pydev 是最常见的一种.本文简单介 ...

  2. [Papers]NSE, $u$, Lorentz space [Bosia-Pata-Robinson, JMFM, 2014]

    $$\bex \bbu\in L^p(0,T;L^{q,\infty}),\quad \frac{2}{p}+\frac{3}{q}=1,\quad 3<q\leq\infty. \eex$$ ...

  3. Yii系列教程(三):集成Redis

    1安装Redis 切换至/usr/local/src下,下载并安装redis: $ wgethttp://redis.googlecode.com/files/redis-2.6.12.tar.gz ...

  4. Raspberry Pi3 ~ 安装samba服务

    文章转载自此博文 1. sudo apt-get install samba 如果出现错误提示,则需要先执行sudo apt-get update,再重新执行sudo apt-get install ...

  5. jquery禁用右键单击功能屏蔽F5刷新

    1.禁用右键单击功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...

  6. Oracle 热备份batch脚本 Windows

    1.最初来源于网络. 2.根据环境和喜好自己修改. 3.实测是可以完成备份任务的. 4.不推荐用于实际环境. bak.bat:执行时执行此脚本,其他脚本是调用和生成或者生成之后再调用.(需要自己修改先 ...

  7. mysql 经典题目

    题目1:实现如下效果 CREATE TABLE IF NOT EXISTS tb_amount( `Id` INT NOT NULL AUTO_INCREMENT, `), `), `Amount` ...

  8. spring依赖注入原理剖析

    PropertyDefinition.java package junit.test; public class PropertyDefinition { private String name; p ...

  9. Yarn通信过程

    yarn包括两块,一个是ResourceManager,主要的作用是管理集群上的资源,目前hadoop版本上,管理的只有cpu和内存. 另外一个叫NodeManager,这上面会跑我们的程序,叫App ...

  10. HW7.17

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...