下面这个”并发技巧清单“列举了在第一部分(二至五章)中介绍的主要概念和规则。
可变状态是至关重要的(It’s the mutable state,stupid)。
所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少,就越容易确保线程安全性。
尽量将域声明为final类型,除非需要它们是可变的。
不可变对象一定是线程安全的。
不可变对象能极大地降低并发编程的复杂性。它们更为简单而且安...
分类:
编程语言 时间:
2015-08-17 19:32:35
阅读次数:
152
String在Java中是一个类类型(非主类型),是一个不可被继承的final类,而且字符串对象是一个不可变对象。声明的String对象应该被分配到堆中,声明的变量名应该持有的是String对象的引用。运行期计算得到的字符串会得到一个新的字符串。tag="hel"+tag;这种现象是Java为了效率...
分类:
编程语言 时间:
2015-08-16 18:04:24
阅读次数:
136
OC内部:可变对象和不可变对象的深(复制)拷贝问题思考:不可变对象:例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向。当对NSString对象做深拷贝时,如果是copy复制方式,其实就是浅复制,只是复制了同一个对象的指针;如果...
分类:
其他好文 时间:
2015-08-15 21:26:06
阅读次数:
2143
引用计数和字符串 内存中的常量字符串的空间分配与其他对象不同,他们没有引用计数机制 凡是自定义的对象都有引用计数机制; OC内部中对象分为可变对象(NSMutableString等)和不可变对象(NSString、NSArray等),不可变对象不适用于引用计数的机制,可变的对象适用引用计数机制。 ....
分类:
其他好文 时间:
2015-08-13 19:31:10
阅读次数:
129
String?: 字符串常量? StringBuffer? : 线程安全的字符串变量 StringBuilder? : 非现场安全的字符串变量 String 类型,String是不可变对象,对String对象的每一次赋值,都是先生成一个新的String对象,然后...
分类:
其他好文 时间:
2015-08-12 13:27:09
阅读次数:
197
immutable简介 不可变对象永远不会发生改变,其字段的值只在构造函数运行时设置一次,其后就不会再改变。例如JDK中常见的两种基本数据类型String和Integer,它们都是不可变对象。为了理解immutable与mutable的区别...
分类:
编程语言 时间:
2015-08-04 17:26:02
阅读次数:
126
字符串基本操作1. String及其常见API1.1. String是不可变对象由于字符串在实际开发中被广泛使用,那么在频繁使用某个字符串时,会出现频繁创建一个字符串对象的现象,java为此对字符串的使用采用了一个优化措施,使得Stirng对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。这样做的目的是可以最大程度的重用相同内容的字符串以减小系统资源的开...
分类:
编程语言 时间:
2015-08-04 13:36:48
阅读次数:
137
String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承.StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对...
分类:
其他好文 时间:
2015-07-19 09:55:53
阅读次数:
104
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)1.String是不可变对象,所以对String类型进行改变的时候等于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用St...
分类:
其他好文 时间:
2015-07-16 02:03:27
阅读次数:
96
可变状态越少就越容易确保线程安全性。尽量将域声明为final类型。不可变对象一定是线程安全的,他能降低并发编程的复杂性,更为简单而且安全可以安全共享发布对象且无需使用同步机制。封装有助于管理复杂性,尽量不要将变量发布出去,也就是共享,尽量封装于对象或者线程内。用锁保护每一个可变变量。当保护同一个不变...
分类:
编程语言 时间:
2015-07-08 20:20:28
阅读次数:
121