-
单实例是不是单线程执行? 5
单实例是不是单线程执行?
我有个单实例类,是不是一个时间只有一个线程可以访问,可以多线程执行吗?
Java代码
public class Single { private static Single instance=null; private Single(){ } public static synchronized Single getInstance(){ if(instance==null){ instance=new Single(); } return instance; } public void process(){ System.out.println("======================"); } }
2008年7月29日 12:25
2个答案 按时间排序 按投票排序
-
你这个就是多线程环境下的单例模式,只是会造成严重的系统的性能问题。
不在多线程环境下的单例模式:
public class Singleton {
private static Singleton singleton = new Singleton(); //私有的本单例类的静态域
/**
* 私有的构造方法,阻止了用户通过此构造方法直接创建实例
*/
private Singleton(){}
public Singleton getInstance(){
return singleton;
}
}
在多线程下的单例模式,楼主已经写出来,需要改进一下:
public class DoubleCheckedLocking {
private static DoubleCheckedLocking dcl;
private DoubleCheckedLocking(){}
private synchronized static void doSync(){
if(dcl == null)
dcl = new DoubleCheckedLocking();
}
public DoubleCheckedLocking getInstance(){
if(dcl == null) //一重检查
doSync(); //同步的二重检查
return dcl;
}
}
我们在检查之后(if (instance == null))再放置一些同步代码, 但是还是可能出现多个现成同时通过了检查。我们改进一下,检查之后,在同步代码中再检查一边,这样就是“双重锁定检查”模式了。它能将非必须的锁定优化掉。这里的同步检查最多发生一次。不会造成性能瓶劲。
我的博客有关于此模式的笔记:http://zhaipuhong.iteye.com/blog/214675
欢迎你来跟我一起讨论学习。2008年8月05日 10:50
-
你的这个类只有getInstance()这个方法是只允许一个进程访问的,因为他有synchronized关键字修饰,而process()这个方法是可以多个进程同时访问的
2008年7月29日 12:38
相关推荐
本文将深入探讨C#中的单线程与多线程实例,帮助你理解它们的区别,并提供相关的实践示例。 一、单线程 单线程意味着一个应用程序只有一个执行线程。在这种情况下,程序按照预定的顺序执行任务,一次只能处理一个...
"VC单线程编程实例"是针对初学者的一个教程,旨在介绍如何在VC环境中创建和管理单线程。 线程是操作系统分配CPU时间的基本单位,每个线程都有自己的执行上下文,包括程序计数器、栈、局部变量等。在单线程程序中,...
总结来说,通过这个简单的Delphi线程实例,我们了解了如何创建自定义线程类,定义线程执行的逻辑,并在主程序中启动和管理线程。在实际开发中,可以依据需求扩展线程功能,实现更复杂的并发操作。
这个实例将帮助初学者理解如何在Java中创建和管理单线程。下面我们将详细讨论相关知识点。 1. **线程的生命周期**: - 新建(New):当使用`Thread`类创建一个对象时,线程处于新建状态。 - 可运行(Runnable):...
在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型简化了程序设计,降低了程序复杂度,使得开发者可以更专注于...
单线程和多线程是计算机程序执行时的两种不同模型,它们在处理并发任务、资源管理和性能上有着显著的差异。理解这两种模型是编程尤其是服务器端开发的基础,尤其是在Java、C#等支持多线程的编程语言中。 首先,让...
"使用单独的线程执行程序代码"这一主题涉及到并发执行任务,提高应用程序的性能和用户体验。以下将详细介绍如何在.NET中创建和管理线程,以及相关的知识点。 1. **线程介绍**:线程是操作系统分配CPU时间的基本单元...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
Console.WriteLine("线程执行完成"); } ``` 在上述代码中,`ThreadStart`是一个预定义的委托类型,它接受一个没有参数的方法。`MyThreadMethod`就是我们要在线程中执行的方法。`myThread.Start()`启动新创建的线程...
`Execute` 方法是线程实际运行的地方,你在这里编写线程执行的任务代码。例如: ```delphi type TMyThread = class(TThread) private FResult: Integer; // 存储计算结果的变量 protected procedure Execute; ...
在VB(Visual Basic)编程中,多线程技术允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。本实例将详细讲解如何利用Thread类来创建和管理线程。 首先,理解线程的基本概念至关重要。线程是程序...
本文将探讨如何在Windows环境下通过简单的命令行工具来监控JVM实例的数量,以及如何进行线程测试,特别是在单例模式下的JVM实例验证。 首先,了解如何监控JVM实例数量。在Windows操作系统中,我们可以使用`jps`命令...
- Executors.newSingleThreadExecutor():创建单线程的线程池,所有任务都在唯一的工作线程中按顺序执行。 - Executors.newCachedThreadPool():创建可缓存的线程池,线程数量根据任务动态调整,空闲超过60秒的线程...
实例分析Java单线程与多线程 在 Java 中,线程是程序执行的基本单元,每个任务称为一个线程,线程不能独立存在,它必须是进程的一部分。根据线程的数量,Java 程序可以分为单线程和多线程两种。 单线程是最常见的 ...
在计算机编程领域,多线程是一种并发执行任务的技术,它允许多个任务或子任务同时在单个程序中运行。这种技术尤其在处理CPU密集型和I/O密集型任务时,能够显著提升程序的效率和响应速度。在本文中,我们将深入探讨多...
此外,`Thread.Join()`方法用于等待一个线程结束,`Thread.Sleep()`可以用来让当前线程暂停一段时间,而`Thread.IsAlive`属性则用于检查线程是否还在运行。在实例中,这些方法可能会被用到来控制线程的生命周期和...
在单线程环境中,程序按顺序执行;而在多线程环境中,多个线程可以共享同一块内存空间,从而实现并行处理。 **继承Thread类创建线程的步骤:** 1. **创建子类**:创建一个类,该类继承自`java.lang.Thread`类。 2....
1. **主程序入口**:在主函数(main或WinMain)中,判断是否已经存在其他实例,如果不存在则创建新实例,如果存在则可能将消息发送回第一个实例,避免重复打开。 2. **线程创建**:在代码中,可能会有如下的代码段...
在单线程环境下,程序按顺序执行;而在多线程环境下,多个线程可以同时执行不同的任务,提高了程序的并行处理能力。 2. **VB.NET中的多线程支持**:VB.NET提供了`System.Threading`命名空间,其中包含了用于创建和...
总的来说,通过分析这个"易语言-json解析的单线程与多线程操作实例",我们可以学习到如何在易语言环境下进行JSON解析,并了解如何利用多线程提升程序执行效率。此外,还可以深入研究线程同步技术,进一步优化多线程...