http://blog.csdn.net/shineflowers/article/details/40047479
① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。
Object类方法:
http://blog.csdn.net/k678mh/article/details/8594769
String常使用的方法:
https://zhidao.baidu.com/question/232452768.html
② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
String,StringBuffer 和 StringBuilder的区别
①可变与不可变
String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
private final char value[];
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
char[] value;
②是否多线程安全
String中的对象是不可变的,也就可以理解为常量,显然线程安全。
AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码:
public synchronized StringBuffer reverse() {
super.reverse();
return this;
}
public int indexOf(String str) {
return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
③StringBuilder与StringBuffer共同点
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。
最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。
分享到:
相关推荐
String,StringBuffer和StringBuilder是Java中三种字符串类型,每种类型都有其特点: * String:String是一种不可变对象,一旦创建就不能修改。 * StringBuffer:StringBuffer是一种可变对象,创建后可以修改,但...
String、StringBuffer 和 StringBuilder 的区别在于,String 是不可改变的对象,一旦创建就不能修改;StringBuffer 是可改变的对象,可以修改其内容,但是线程安全,执行效率较低;StringBuilder 是可改变的对象,...
4. String、StringBuffer、StringBuilder 的区别:String 是不可变字符串,StringBuffer 和 StringBuilder 是可变字符串,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的。 5. 重载和重写的区别:重载...
文章目录每日一考和复习Java常用类字符串相关的类String类String的特性String陷阱String常用方法String和其他类型转换StringBuffer类、StringBuilder类StringBuffer的常用方法效率对比JDK 8之前的日期时间API ...
sleep() 和 wait() 的区别 sleep() 和 wait() 都是 Thread 类的方法,但是它们有着不同的作用。sleep() 方法使当前线程休眠指定的时间,但是它不会释放对象锁,而 wait() 方法会释放对象锁。此外,sleep() 方法可以...
7. Java操作字符串的类包括String、StringBuilder和StringBuffer。String是不可变的,StringBuilder和StringBuffer可变,后者在多线程环境下更安全。 8. String str="i"与String str=new String("i")不完全一样。...
在字符串的操作方面,文档中提到了String类在Java中是不可变的,以及String、StringBuffer和StringBuilder之间的区别。特别地,还涉及到了String类对象的创建和赋值时内存分配的细节,以及字符串连接时的效率问题。 ...
15. **String 和 StringBuffer的区别**: - String是不可变的,每次修改都会生成新的对象。 - StringBuffer是可变的,可以在原对象上进行修改,更高效。 16. **运行时异常与一般异常**: - 运行时异常...
6. **sleep() 和 wait() 的区别** - **sleep()**:让当前线程休眠一段时间,不会释放对象锁。 - **wait()**:使线程进入等待状态,释放对象锁,等待被notify()或notifyAll()唤醒。 7. **Hibernate 实现类间关系**...
String,StringBuffer和StringBuilder的区别; 解答: Object的方法有哪些:比如有wait方法,为什么会有; 解答: wait和sleep的区别,必须理解!!! 解答: 强引用,软引用和弱引用的区别; 解答: java的多态表现在...
#### 三、String,StringBuffer和StringBuilder的区别 字符串处理是Java开发中的常见任务之一,下面将介绍几种常见的字符串处理类。 **3.1 运行速度** - **StringBuilder** > **StringBuffer** > **String** **...
1. **String, StringBuffer, StringBuilder的区别** - **String**:不可变对象,创建后其内容无法改变,适合用于字符串拼接的常量场景。 - **StringBuffer**:线程安全的可变类,适合多线程环境下进行字符串拼接。...
* Java 和 C++的区别,重载和重写的区别,String 和 StringBuilder、StringBuffer 的区别,静态变量、实例变量、局部变量的线程安全性等。 * B 树、二叉树、分布式锁的实现、分布式 session 存储解决方案等知识点。 ...
**问题**: String 和 StringBuffer 有什么区别? **分析与解答**: `String` 表示不可变的字符序列,而 `StringBuffer` 提供了可变的字符串处理功能。当需要对字符串进行频繁修改时,应使用 `StringBuffer` 或 `...
74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78...
多线程部分涵盖了线程的创建、状态、同步、线程池等概念,如`Runnable`和`Callable`的区别,线程的`sleep()`、`wait()`、`notify()`和`notifyAll()`,以及死锁和线程安全问题。 反射部分涉及Java运行时动态访问类和...
40. sleep() 和 wait() 的区别:sleep()使线程休眠,wait()使线程等待。 41. 同步和异步的区别:同步是阻塞式的,异步是非阻塞式的。 42. 多线程有几种实现方法:Thread类、Runnable接口、Callable接口。 43. 启动一...