A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程的使用会导致出现安全问题,怎么解决呢?使用同步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
情况四:
单例模式(懒汉模式)中可以使用同步,可以通过双重判断的方式,解决效率额问题,减少判断锁的次数
情况五:
当线程任务中出现了多个同步,如果同步中嵌套了其他同步,容易引起死锁。这种情况要尽量避免。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马