`

线程独享

 
阅读更多

http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html

 

ThreadLocal 线程独享,synchronized 方法独享。

 

import java.text.ParseException;

public class TestSimpleDateFormat {
    
    public static class ThreadSafe extends Thread {
        @Override
        public void run() {
            while(true) {
                try {
                	System.out.println(this+"="+System.currentTimeMillis());
                    //自己等待自己2000毫秒,提高并发命中//调用线程
                	this.join(2000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                try {
                    System.out.println(this.getName()+":"+DateUtil.parse("2015-11-11 00:00:00"));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        }    
    }
    
    
    public static void main(String[] args) {
        for(int i = 0; i < 3; i++){
            new ThreadSafe().start();
        }
            
    }
}

 Exception in thread "Thread-1" java.lang.NumberFormatException: For input string: "20152015E4"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Long.parseLong(Long.java:419)

at java.lang.Long.parseLong(Long.java:468)

at java.text.DigitList.getLong(DigitList.java:177)

at java.text.DecimalFormat.parse(DecimalFormat.java:1297)

at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589)

at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)

at java.text.DateFormat.parse(DateFormat.java:335)

at com.wnj.javausage.DateUtil.parse(DateUtil.java:17)

 

方式1

    private static ThreadLocal<DateFormat> sdf= new ThreadLocal<DateFormat>() {
        @Override
        protected DateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };

    public static Date parse(String dateStr) throws ParseException {
        return sdf.get().parse(dateStr);
    }

 方式2

    public static DateFormat getDateFormat() {  
        DateFormat df = threadLocal.get();  
        if(df==null){  
            df = new SimpleDateFormat(date_format);  
            threadLocal.set(df);  
        }  
        return df;  
    }  

    public static String formatDate(Date date) throws ParseException {
        return getDateFormat().format(date);
    }

 

分享到:
评论

相关推荐

    MySQL内存使用之线程独享介绍

    在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。 线程栈信息使用内存...

    易语言修改线程默认堆栈大小源码

    线程堆栈是每个线程独享的内存区域,用于存储局部变量、函数调用参数、返回地址等信息。默认堆栈大小是由操作系统决定的,通常在1MB左右,但不同系统和配置可能有所不同。如果线程运行过程中需要处理大量的局部变量...

    java多线程设计模式详解(PDF及源码)

    6. **线程局部变量模式**:`ThreadLocal`类提供了一种线程独享的变量,每个线程都有自己的副本,互不影响,常用于缓存或请求上下文。 7. **Future和Callable模式**:`Future`接口代表异步计算的结果,`Callable`...

    Java 多线程的返回对象和资源独享线程.docx

    Java 多线程的返回对象和资源独享线程.docx

    Linux下的多线程编程

    - **线程私有数据**: 可以由线程独享的数据。 进程的所有信息(如程序文本、全局内存、堆内存、文件描述符等)都对进程内的所有线程可见。 #### 五、线程标识 - **线程ID**: 类似于进程ID,每个线程都有一个唯一...

    TCMalloc代码框架

    功能描述:多线程情况下频繁向系统申请内存不仅损耗效率,还会造成内存碎片的问题,在该项目中,Thread Cache用于小于256KB的内存分配,每个线程独享各自的thread cache;该层设计为哈希桶结构,线程从这里申请内存...

    mysql中的内存使用.pdf

    MySQL的内存管理可以根据使用的内存类型被划分为两大类:线程独享内存和全局共享内存。 首先是线程独享内存,这一部分的内存被各个线程独立使用,不会与其他线程共享。线程独享内存的管理主要涉及以下几个参数: 1...

    TDSQL新考题.docx

    15. **线程独享内存**:线程独享的内存包括 read_buffer_size(读缓冲大小),因为每个线程都有自己的读缓冲。query_cache_size(查询缓存大小)是全局共享的,不是线程独享。innodb_buffer_pool_size(InnoDB 缓冲...

    深入理解JAVA内存模型(高清完整版)

    主内存是所有线程共享的存储区域,而工作内存则是每个线程独享的,用于存储线程对共享变量的副本。线程对变量的读写操作都是在自己的工作内存中进行,然后通过主内存来完成变量的同步。 接着,我们来看synchronized...

    JVM内存模型及分区 JVM内存模型及分区

    - 这是每个线程独享的内存区域,用于存储当前线程正在执行的字节码指令的行号。 - 在多线程环境下,处理器通过线程切换来实现并发,每个线程都有自己的计数器,以确保恢复到正确的位置继续执行。 - 如果线程正在...

    Java并发编程实战中的例子.zip

    6. **线程局部变量**:`ThreadLocal`类提供了一种线程独享的变量,每个线程都有自己的副本,避免了线程间的数据冲突。 7. **并发异常处理**:在并发编程中,正确处理异常是必不可少的,如`InterruptedException`,...

    JVM内存区域划分.docx

    程序计数器,或PC寄存器,是每个线程独享的内存区域。它存储当前线程正在执行的指令地址,CPU在执行指令时,会从中获取地址,然后加载并执行指令。由于Java的多线程机制,每个线程在任何时候只能执行一条指令,因此...

    南开大学2021年9月《并行程序设计》作业考核试题及答案参考5.pdf

    3. CUDA 寄存器是由每个线程独享的。在 CUDA 编程模型中,每个线程都有自己的寄存器空间,这个寄存器空间是独享的,不同线程之间不能共享。 4. 传统科学和工程实验相对于计算机并行仿真的劣势不包括结果不准确。...

    linux高级编程 编程

    - **线程独享资源**:每个线程都有自己独特的线程ID、上下文(包括寄存器值、程序计数器、栈指针等)、栈空间、errno变量、信号屏蔽字和调度优先级等。 #### 五、线程库与控制 在Linux系统中,线程相关的函数位于`...

    java内存模型.pdf

    栈用于存储方法调用的局部变量、方法参数和计算结果,线程独享,随方法调用而创建,方法结束时销毁。 3. **本机内存** - 除了JVM内存,Java程序还会使用到操作系统级别的内存,如操作系统的页缓存,这些不在JMM的...

    jvm分析资料及工具1

    栈内存每个线程独享,用于存储基本类型和对象引用。方法区存储类信息、常量、静态变量等。本地方法栈服务于Java Native Interface(JNI)调用的本地方法。程序计数器记录当前线程执行的指令地址。 2. **垃圾收集...

    MySql5.7安装到主从配置到生产环境高可用MHA部署

    1. **线程独享内存**:每个连接都会分配一块独享内存区域,用于保存该连接的信息,例如线程ID、线程状态等。主要涉及的参数有 thread_stack(线程堆栈大小)等。 2. **全局共享内存**:全局共享内存是所有连接共用...

    Java虚拟机的基本结构 (2)1

    1. **程序计数器(Program Counter Register)**:这是每个线程独享的内存区域,它记录了当前线程正在执行的字节码的行号,用于控制程序的执行流程。 2. **Java虚拟机栈(Java Virtual Machine Stacks)**:同样为...

Global site tag (gtag.js) - Google Analytics