多线程局部变量

问题描述

//仅用于测试,无任何业务public class DateFormat2 { public static SimpleDateFormat parse(){ SimpleDateFormat adf=new SimpleDateFormat (); return adf}}//多线程测试上述方法,局部变量应该在线程栈中,每个线程访问该方法后都new一个对象,应该是不同的引用地址,但结果却不是,测试方法如下public class Test { public static class TestSimpleDateFormatThreadSafe extends Thread { @Override public void run() { while(true) { try { this.join(2000); } catch (InterruptedException e1) { e1.printStackTrace(); } try {System.out.println(this.getName()+":"+DateFormat2.parse());} catch (ParseException e) {e.printStackTrace();} } } }public static void main(String[] args) throws ParseException {for (int i = 0; i <3; i++) {new TestSimpleDateFormatThreadSafe().start();}}}请问这是为什么?,非常感谢

解决方案

这个问题的关键是不是在于,静态方法中定义的内部变量是否属于类或类实例共享级别? 如果是,那么这个是不就相当于public static SimpleDateFormat adf = new SimpleDateFormat();
解决方案二:
说明sprite311你的例子 是不同的SimpleDateFormat对象 但是他们的hashCode()相同 2014-01-08 15:13mzqhappylife嗯,这个解释我能接受,非常感谢,给分了 2014-01-08 15:47

时间: 2024-12-23 05:51:35

多线程局部变量的相关文章

如何使用线程局部存储实现多线程下的日志系统

概述 通常来说,在应用程序中需要日志来记录程序运行的状态,以便后期问题的跟踪定位.在日志系统的设计中,通常会有一个总的日志系统来统一协调这些日志的设置如位置.输出级别和内容等.在多线程编程中,当每个线程都需要输出日志时,因为要考虑线程间的同步,日志系统的设计更加复杂. 在单线程应用程序中,通常使用一个日志单例向某个文件输出应用运行过程中的重要日志信息,但是在多线程环境中,这样做显然不好,因为各个线程打印出的日志会错综复杂从而使得日志文件不容易阅读和跟踪.比较好的办法是主线程记录自己的日志,各个子

局部变量的作用域-多线程和函数里的静态变量

试试下面这段代码的输出是什么? #include <stdio.h> #include <process.h> #include <windows.h> class foo { public: foo() { printf( "before sleep\n" ); Sleep( 1000 ); printf( "after sleep\n" ); } void test() { printf( "in test\n&qu

上下文切换与多线程实现的代价

多线程中的上下文切换 支持多任务处理是CPU设计史上最大的跨越之一.在计算机中,多任务处理是指同时运行两个或多个程序.从使用者的角度来看,这看起来并不复杂或者难以实现,但是它确实是计算机设计史上一次大的飞跃.在多任务处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里.上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作. 在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运

Java笔记:多线程

一些概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程 是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 Windows 系统中,一个运行的 exe 就是一个进程. 线程 是指进程中的一个执行流程,一个进程中可以运行多个线程.比如 java.exe 进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存. 同时 执行是人的感觉,在线程之间实际上轮换执行. 多线程间堆空间共享,栈空间独立.堆存的是地址

Servlet及JSP中的多线程同步问题

js|servlet|多线程|问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题.然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随机性的问题调试难度也很大. 一.在Servlet/JSP中的几种变量类型 在

利用 Visual C# 创作简单的多线程组件(转载于MSDN)

visual|多线程 可以编写能同时执行多个任务的应用程序.此能力(称为"多线程处理"或"自由线程处理")是设计处理器密集型且要求用户输入的组件的强大方法.计算工资表信息的组件就是一个可能利用多线程处理的组件示例.该组件可以在一个线程上处理用户输入到数据库的数据,而在另一个线程上执行频繁使用处理器的工资表计算.通过在不同的线程上运行这些进程,用户不必等到计算机完成计算,就可以输入其他数据.在本演练中,将创建一个简单的多线程组件,该组件可以同时执行若干个复杂计算. 创

Java多线程同步问题的探究(五)

五.你有我有全都有-- ThreadLocal如何解决并发安全性? 前面我们介绍了Java当中多个线程抢占一个共享资源的问题.但不论是同步还是重入锁,都不能实实在在的解决资源紧缺的情况,这些 方案只是靠制定规则来约束线程的行为,让它们不再拼命的争抢,而不是真正从实质上解决他们对资源的需求. 在JDK 1.2当中,引入了java.lang.ThreadLocal.它为我们提供了一种全新的思路来解决线程并发的问题.但是他的名字难免让我们望 文生义:本地线程? 什么是本地线程? 本地线程开玩笑的说:不

Java多线程基础总结一: synchronized(1)

最近写关于并发的小应用,才发现真的该好好的正视java的多线程了.之前没有深入的掌握,用起来也是那么的吃力.作为J2SE里面为 数不多的重要难点之一,多线程应用一直是我以敬畏的心态去尽量避开的,只是通过一些实例掌握一些简单的应用.这段时间会多用点时间 去掌握,有需要写下来的我也会通过这种方式既分享又加深理解. 首先这篇只涉及基础的知识整理,对于并发包java.util.concurrent内的线程池和锁我会看情况在之后的总结中写点东西.对于进程的 概念我们都很熟悉,它是应用程序级的隔离,不同的应

C++ Builder多线程编程中一些体会

最近在写一个程序用到了多线程,所以对CB下的多线程有一定的学习. 现在把自己的一些心得讲一下.水平有限,写的很粗略,请大家见谅. CB相对于VC来说,在CB下写多线程程序是很简单的.不仅是VCL中有TThread这个类.封装了那些关于多线程的WINDOW API.我觉得更方便的是他提供了 直接访问主VCL线程中对象的能力.可以很容易的和主线程中的窗体,控件 打交道.和单线程的方式没有太多区别.只是在有多个线程都要访问主线程 中的对象(比如访问同一个窗体上的StringGrid).只要用Threa