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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何招俊 中级黑马   /  2012-2-15 11:06  /  1572 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么同步函数中使用的锁是this?

3 个回复

倒序浏览
只是为了方便和快捷,如果你不使用也可以自己new对象。最好是用this

如果你很多个线程都来自一个对象,就是你自己的线程类,那么你就要加锁。要是不加锁的话,线程得到系统随机时间片后就会执行了,就会乱套了。。

所以要让这些线程同步。。别打在一起。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
同步函数需要一个对象来作为锁
时常,我们需要也只需要将同一个对象的一些代码保持同步
这里使用this,也就是当前对象,所以使用this很方便。
比自己建立一个对象要节省代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

同步代码块的格式是:
synchronized(对象)
{
       需要同步的代码;
}
将synchronized写到方法上,就成了同步函数。这时同步代码块上的“synchronized(对象)”括号里面的“对象”就不能自己定义了,但是因为同步函数会被对象调用,但是你不确定对象叫什么名,所以使用到this。

锁的原理:
Java中每个对象都有一个内置锁。当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。当程序运行到synchronized同步方法或代码块时才该对象锁才起作用。一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马