黑马程序员技术交流社区

标题: 多线程中的锁,这玩意挺有意思的 [打印本页]

作者: 安仔    时间: 2015-9-20 20:01
标题: 多线程中的锁,这玩意挺有意思的
多线程的使用会导致出现安全问题,怎么解决呢?使用同步synchronized(这单词好难记)
同步的引入就有了锁的引入,下面总结下楼主所知道的关于这个锁的知识点
情况一:
private Object obj = new Object();
synchronized(obj)//同步代码块的锁就是obj,当然这个可以是任意对象
情况二:
public synchronized void sale(){
        if(tickets>0){
                try{Thread.sleep(10);}
                catch(InterruptedException e){}
                System.out.println(Thread.currentThread().getName()+"...."+tickets--);//打印线程名称
        }
}
同步函数的锁是this,这点还是有些难度去理解的。被调用的时候this.slae();所以这个锁(肯定是个对象)应该是this(调用它的对象)
情况三:
static同步函数,使用的锁不是this,而是字节码文件对象,类名.class
情况四:
单例模式(懒汉模式)中可以使用同步,可以通过双重判断的方式,解决效率额问题,减少判断锁的次数
情况五:
当线程任务中出现了多个同步,如果同步中嵌套了其他同步,容易引起死锁。这种情况要尽量避免。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2