黑马程序员技术交流社区

标题: 关于线程中的一个问题 [打印本页]

作者: 何招俊    时间: 2012-2-15 11:06
标题: 关于线程中的一个问题
为什么同步函数中使用的锁是this?
作者: 李杨    时间: 2012-2-15 11:25
只是为了方便和快捷,如果你不使用也可以自己new对象。最好是用this

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

所以要让这些线程同步。。别打在一起。
作者: 秦碧    时间: 2012-2-15 11:44
同步函数需要一个对象来作为锁
时常,我们需要也只需要将同一个对象的一些代码保持同步
这里使用this,也就是当前对象,所以使用this很方便。
比自己建立一个对象要节省代码
作者: 黄锦成    时间: 2012-2-15 12:04

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

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




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