private static void multiThreadedLocalPoolTest( final int cnt ) throws InterruptedException { final Runnable task1 = new Runnable() { @Override public void run() { final List<String> lst = new ArrayList<String>( 100 ); long start = System.currentTimeMillis(); for ( int i = 0; i < cnt; ++i ) { final String str = Integer.toString( i ); final String interned = str.intern(); if ( str != interned ) System.out.println( "Thread 0: different interned " + str ); lst.add( interned ); if ( i % 1000000 == 0 ) { System.out.println( "Thread 0 : " + i + "; time = " + ( System.currentTimeMillis() - start ) / 1000.0 + " sec" ); start = System.currentTimeMillis(); } } System.out.println( "Total length = " + lst.size() ); } }; final Runnable task2 = new Runnable() { @Override public void run() { final List<String> lst = new ArrayList<String>( 100 ); long start = System.currentTimeMillis(); for ( int i = 0; i < cnt; ++i ) { final String str = Integer.toString( i ); final String interned = str.intern(); if ( str == interned ) System.out.println( "Thread 1: same interned " + str ); lst.add( interned ); if ( i % 1000000 == 0 ) { System.out.println( "Thread 1 : " + i + "; time = " + ( System.currentTimeMillis() - start ) / 1000.0 + " sec" ); start = System.currentTimeMillis(); } } System.out.println( "Total length = " + lst.size() ); } }; final Thread thread1 = new Thread( task1 ); thread1.start(); Thread.sleep( 2000 ); final Thread thread2 = new Thread( task2 ); thread2.start();}
相关推荐
而在多线程环境下,`StringBuffer`是线程安全的,而`StringBuilder`则更快,但不保证线程安全。 此外,`String`类还涉及到字符串常量池的概念。当创建一个字符串时,如果该字符串已经存在于池中,Java会直接返回池...
6. **字符串的不可变性**:由于字符串不可变,对字符串的操作(如`substring()`或`concat()`)都会返回新的字符串对象,不会改变原始字符串,这对于多线程环境下的安全非常重要。 7. **String类的常用方法**:`trim...
这种设计保证了字符串对象的一致性和安全性,尤其是在多线程环境中。例如,在创建一个字符串 `"abc"` 后,无法通过任何方法改变这个字符串的内容为 `"abd"` 或其他形式。 ### 3. 创建字符串的多种方式 #### 直接...
这种特性使得`String`类非常适合在多线程环境中使用,因为不需要担心其内容被多个线程同时修改。 #### 二、String 对象的创建与比较 在Java中,可以使用两种方式来创建`String`对象: 1. **直接赋值**:如`String...
4. **String与StringBuilder/StringBuffer的区别**:比较在多线程环境下,何时使用StringBuilder/StringBuffer以提高性能。 5. **字符串常量池**:介绍Java内存模型中的字符串常量池,以及它的作用和工作原理。 6....
在Java编程语言中,String类型扮演着至关重要的角色。它被广泛用于表示和操作文本,因为它是不可变的,这确保了字符串的安全性和效率。...同时,对于字符串的操作,还需要注意线程安全问题,尤其是在多线程环境中。
它们允许在原地修改字符串,适合在多线程环境中或频繁修改字符串的情况。 `String`类实现了`Serializable`、`Comparable`和`CharSequence`接口。`CharSequence`是一个接口,代表字符序列,String、StringBuffer和...
在Java编程语言中,`String` 类是最常用的数据类型之一,用于处理文本数据。本文将深入探讨Java中的`String`类及其使用时需要注意的关键点,希望对开发者们有所帮助。 #### 1. 字面量(Literal)与字符串常量池...
1. 并发改进:对java.util.concurrent包进行了增强,包括ForkJoinPool和CountDownLatch的改进,提升了多线程环境下程序的执行效率。 2. 类数据共享(Class Data Sharing,CDS):允许在启动时共享类加载数据,减少...
这份"javaString总结共13页.pdf.zip"压缩包文件显然包含了关于Java字符串的深入讲解,覆盖了多个关键知识点。虽然没有提供具体的PDF内容,但我可以基于常见的Java String主题为你概述一些重要的概念。 1. **字符串...
在Java编程语言中,`String`类是使用最广泛的类之一,主要用来处理文本字符串。字符串在Java中被视为不可变对象,这意味着一旦创建了一个`String`对象,就不能更改它的值。下面我们将深入探讨`String`类的一些关键...
### Java中的String类型详解 在Java编程语言中,`String` 类型是非常基础且重要的数据类型之一...而在多线程环境中,则推荐使用`StringBuffer`。此外,了解`String`对象的内存分配机制也有助于更好地理解其行为特征。
应优先考虑使用`StringBuilder`或`StringBuffer`(多线程环境)来累积字符串,它们提供了append方法,避免了不必要的内存开销。 3. **预定义常量**:对于重复使用的字符串,可以声明为静态常量,这样它们只会在类加载...
- 在多线程环境中,StringBuffer是线程安全的,因为它的方法加了synchronized修饰。 - StringBuilder在单线程中性能优于StringBuffer,因为它没有同步开销。 5. **String的concatenation** - 连续多次使用`+`...
在深入学习Java其他高级特性,如多线程、集合框架、IO流等之前,牢固掌握基础是非常必要的。对于开发工具,熟练运用IDE如IntelliJ IDEA或Eclipse,以及版本控制工具Git,也是提升开发效率的重要环节。同时,阅读源码...
5. 在多线程环境下,如何正确使用synchronized关键字? 6. Java中如何实现线程间的通信? 7. 解释Java中的单例模式及其可能的陷阱。 8. 如何在Java中处理网络异常,防止资源泄露? 9. 请解释JVM的类加载过程及双亲...
在多线程环境中,`StringBuffer`是线程安全的,而`StringBuilder`在单线程环境下通常更快。 总之,Java中的`String`对象不仅是一个简单的文本表示,它涉及到内存管理、常量池、不可变性和方法如`intern()`等,这些...