1.关于“==”和“equals”,其中对引用型变量和简单类型是不同的
(1) "==" 对简单类型来说,是比较值是否相等; 对于引用来说,是看二者是否指向同一个地址。
(2) equals 不管对于什么类型都是比较值是否相等。
还要注意的是:当引用型变量没有通过关键字new 来申请变量时,它可能不会在堆里生成一个新的变量,而是到栈中找一个是否相等的值,然后把这个引用指向它,比如:在栈中有“asdfg”这个一个字符串,然后我们String str1 = "asdfg" ;这样的话,str1并没有在堆中生成新的字符串,而是将引用指向了栈中的“asdfg”。
2.关于“synchronized”的使用 ,线程同步问题,并发问题,线程安全。
线程安全:指的是在多线程并发执行的程序中,怎么保证各自的线程是安全的,比如说:多个请求线程要请求某个公共资源(可以使一个对象,一个程序,一个方法,一段代码段),怎么来保证各自的请求线程中没有冲突,对请求服务的某些临界资源没有冲突。通过某种形式的互斥而实现对并发访问的保护,则代码是线程安全的。
http://en.wikipedia.org/wiki/Thread-safe http://pialion.blogchina.com/2531546.html(
开发线程安全的Spring Web应用)
而synchronized关键字往往是Java应用中实现线程安全最重要的因素。
对于synchronized,它的使用可以对代码,也可以针对某个方法。
(1).对于方法,它只对某个对象来说是线程安全的,就是说
Object o = new **Object();对于所有操作o对象的线程是安全,并不能保证 o2,o3等等对象也是线程安全的
(2).对于代码来说,在synchronized内的代码,对于所有的线程都是安全的。
比如:
在sychronized内的代码,对有SynClass 的所有对象都是线程同步的,换句话说就是,此处代码对所有的线程来说,在某一时刻只有一个线程拥有这个对象锁o,只有等这个线程执行完了以后,才释放对象锁o,这样其他的线程才能去争取这个锁O来获得代码的执行权。