本帖最后由 李杨 于 2012-2-15 22:09 编辑
同学你好:
首先你需要明白synchronized的作用,意思是当线程得到了cpu分配的随机时间片后并获得了锁,那么这个线程就可以执行同步代码块中的代码,没有得到时间片的线程只能等待cpu分配.
首先说明:线程拥有了执行权其实是得到cpu为该线程分配了随机时间片才有权执行的.
为了可以让你充分的明白而不是了解,举例: 线程数量 3个 分别是线程 a, b, c
当三个线程启动后,b线程先被cpu分配了随机时间片. 当b线程执行到 2 的位置的时候(即在刚执行完外面的if和同步代码块之间的位置的
时候时间片用完了),就会等待时间片到来.
这时a线程得到了随机时间片并开始执行,执行到同步代码块并且拿到了锁,在拿到锁之后却还没来得及执行里面的if的时候,a线程的时间片用完了在3的位置等待cpu的时间片.
这时c线程得到了cpu分配的时间片开始执行,当c线程在刚进去方法却还没来得执行外面的if的时候时间片用了,就在1的位置等待时间片到来.
这时a线程得到时间片开始运行,开始判断里面的if判断对象还没有创建,则创建
了对象然后返回了,这个时候在2位置的b线程得到了时间片,b线程开始运行,并进入了同步代码块那了锁,判断对象已经存在了(这位同学你
要注意的地方就在这!!!!!!)就直接返回,这时在1位置的c线程得到时间片,开始判断外面if发现对象已经存在了就不执行同步代码块了就直
接返回对象了.
同学希望你能看懂过程....不要了解!
加油!!! |