- 浏览: 375794 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
参考网址如下:
http://xupo.iteye.com/blog/463426
http://www.iteye.com/topic/1121678?page=3
上面是实现单例的各种方法。
具体说明都在上面的链接中,非常详细。。
http://xupo.iteye.com/blog/463426
http://www.iteye.com/topic/1121678?page=3
package com.lj.singleton2; public class Singleton { private static Singleton st; private static Singleton instance1 = new Singleton(); private static Singleton instance2; private static Singleton instance3; private Singleton() { } // 懒汉式单例->当需要的时候,并且发现没有实例的时候,采取初始化 public static Singleton getInstance() { if (null == st) { threadSleep(); synchronized (Singleton.class) { //这里线程们会一个个执行st=new Singleton();然后返回, //所以这个方法在多线程环境中没用。 st = new Singleton(); } } return st; } // 饿汉式单例->不管你需不需要,反正我是饿了,类加载的时候就已经 // 初始化,没有起到延迟加载的效果。 // 优点:这种方式最简单并且是线程安全的。 // 缺点:假如这个单例非常大, 在第一次类加载的时候可能会耗掉大量资源。 public static Singleton getInstance1() { return instance1; } // 对懒汉式进行同步,牺牲了性能,同步的原则应该是尽量对代码块同步, // 不要对整个方法同步 public static synchronized Singleton getInstance2() { if (instance2 == null) { threadSleep(); instance2 = new Singleton(); } return instance2; } // 双重检查加锁DCL(double checking lock),只在第一次调用 // getInstance()时才要同步,提高性能 public static Singleton getInstance3() { if (instance3 == null) { threadSleep(); synchronized (Singleton.class) { if (instance3 == null) { instance3 = new Singleton(); } } } return instance3; } // 让当前线程休眠1秒,模拟多个线程同时访问instance public static void threadSleep() { try { System.out.println("当前线程休眠1秒"); Thread.currentThread().sleep(1000); } catch (Exception e) { e.printStackTrace(); } } }
上面是实现单例的各种方法。
public class ThreadTest extends Thread { @Override public void run() { Singleton s=Singleton.getInstance(); System.out.println(s.toString()); } public static void main(String[] args) { Singleton s=Singleton.getInstance1(); for(int i=0;i<10;i++){ ThreadTest test=new ThreadTest(); test.start(); } } }
具体说明都在上面的链接中,非常详细。。
发表评论
-
Socket编程的HelloWorld实例
2014-11-07 15:05 900public class Client { ... -
ImageIO宋体出现小方框的解决
2014-11-03 16:34 927http://www.blogjava.net/yuanqix ... -
ArrayList根据条件+for循环批量删除的方法
2014-09-23 11:39 2722场景如下: ArrayList<Obj> list ... -
Java内部类的实例化
2014-08-06 15:51 1034class A{ getInstance(){ ... -
通过Thread.sleep把任务平均分配给线程按顺序执行的小例子
2014-07-22 10:46 1082package com.lj.test.JavaSe4; ... -
输入两个整数, 计算百分比
2014-07-21 18:01 1464public static String getPercen ... -
timer cancel方法的一个小实例
2014-07-21 12:14 1133package com.lj.timer; import ... -
通过Calendar获取上个月的最后一天
2014-06-26 12:11 2868Calendar cal=Calendar.getI ... -
通过BigInteger进行数字进制的相互转换
2014-06-24 11:09 25561. 十六进制转换为十进制 BigInteger deci ... -
[转]RSA实例
2014-06-18 17:27 908package com.lj.rsa; import j ... -
[转]sun.misc.BASE64Encoder找不到jar包的解决方法
2014-06-18 15:43 9421.右键项目-》属性-》java bulid path-》jr ... -
空Object转换String的陷阱
2014-06-17 15:45 805Object a=null; String b ... -
Java Convert Long to Date
2014-06-16 18:06 766问题: I have list with long value ... -
[转]JAVA中List&Set转换
2014-06-07 14:23 526JAVA中List&Set转换 list = new ... -
aes加密时的Illegal key size or default parameters
2014-06-06 14:21 4198KeyGenerator kgen = KeyGenerat ... -
String.replaceLast()
2014-06-03 16:02 1093http://stackoverflow.com/questi ... -
[转]多线程任务分配实例
2014-05-26 15:50 699[url]http://www.iteye.com/probl ... -
通过正则表达式来获取json数值
2014-05-23 11:39 13private String getJsonValue(Str ... -
java找不到或无法加载主类
2014-05-19 13:21 1281用CMD运行java +类名, 居然碰到这个问题。 编译是没有 ... -
Java转义字符笔记 |
2014-01-12 21:01 917数据库有一个关键字列-keyword,里面存放的关键字格式如下 ...
相关推荐
然而,在多线程环境下,单例模式可能会遇到线程安全问题,因为多个线程可能会同时访问同一个实例,从而导致数据不一致和其他问题。 在 Java 中,单例模式的实现可以使用双重检查锁机制、静态内部类和枚举类型等方式...
### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...
在多线程环境下,可能会创建多个实例。例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == ...
这种方法在多线程环境中存在线程安全问题,如果不加同步控制,可能会创建多个实例。 ```java public class SingleInstance1 { private static SingleInstance1 instance; private SingleInstance1() {} public...
原始的懒汉单例在多线程环境下不安全,如下所示: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if...
- **线程安全问题**:懒汉式单例模式在多线程环境下可能会导致创建多个实例,因此需要采用同步机制保证线程安全,例如使用`synchronized`关键字。 - **静态内部类方式** - **实现**: ```java class Single3 {...
1. **懒汉式(线程不安全)**:实例化发生在getInstance()方法中,但在多线程环境下可能造成多个实例的问题。 2. **懒汉式(线程安全)**:通过synchronized关键字保证线程安全。 3. **饿汉式**:在类加载时就完成了...
在多线程环境下,线程安全的单例模式尤为重要,因为如果不正确实现,可能会导致多个线程同时创建多个实例,违反了单例模式的基本原则。 在Java中,单例模式通常有以下几种实现方式: 1. 饿汉式(静态常量): ...
Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象
#### 惰性加载在多线程中的问题 然而,在多线程环境中,惰性加载的方式会导致线程安全问题。假设两个线程A和B几乎同时到达`getInstance()`方法,由于`instance`变量当前为`null`,两个线程都会尝试创建新的`...
这种实现方式在多线程环境下不安全,可能导致多个实例的创建。 2. **饿汉式**:在类加载时就完成初始化,保证了线程安全,但不满足懒加载需求。 3. **双重检查锁定(DCL)**:在多线程环境中,确保了单例的唯一性和...
该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...
Java单例设计模式详解 Java单例设计模式是一种创建型设计模式,可以保证一个类只有一个实例,并提供...静态内部类单例模式是四种实现方式中最为常用的,因为它可以避免多线程环境下的同步问题,同时也避免了资源浪费。
Java单例模式是一种常见...在实际开发中,应谨慎使用单例模式,尤其是在多线程环境和需要考虑可测试性的场景下,要权衡其利弊。同时,考虑到Java 9及更高版本中的模块化系统,单例模式的使用也需要结合模块化进行考量。
3. 在多线程环境下,不正确的单例实现可能导致线程安全问题。 4. 单例模式可能会导致难以进行测试,因为它与依赖注入相冲突。 总之,单例模式是一种强大的设计模式,可以有效地管理和控制资源,但也需要根据具体...
总结起来,多线程环境下的单例模式实现需要注意线程安全问题,尤其是懒汉式单例,需要采取适当的同步措施来防止多线程环境下的实例化问题。此外,对于不同场景的需求,可以选择不同的实现方式来优化性能和资源使用。
单例模式是Java多线程编程中最常用的设计模式之一,它的主要作用是确保一个类在应用程序中只有一个实例,并提供一个全局访问点。单例模式有多种实现方式,如饿汉模式、懒汉模式等。下面我们将详细讨论Java多线程实战...
3. **双重检查锁定(DCL,线程安全)**:在多线程环境下,通过双重检查锁定来确保线程安全,避免了同步带来的性能影响。 ```java public class Singleton { private volatile static Singleton instance; private ...