本帖最后由 孔雀东南飞 于 2013-6-10 10:37 编辑
this问题让我很迷惑,怎么都理解不了。
如下:定义了同步函数,public synchronized void show(),但是在run()中调用,为什么要加this呢?
老师解答是:函数需要被对象调用,那么函数都有一个所属对象引用,就是this。所以同步函数使用的锁是this。
但是:函数之间不是也可以调用吗,既然this. 可以 省略,那写不写又有什么关系?
而且:如下代码一与代码二都调用了show,为什么代码一加this,而代码二就不需要加呢?
class Ticket implements Runnable
{
private int tick = 100;
boolean flag = true;
public void run()
{
/*代码一:
while(true)
{
this. show(); //必须加this,why?
}
*/
//代码二:
if(flag)
{
while(true)
{
synchronized(this)
{
if(tick>0)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
}
System.out.println(Thread.currentThread().getName+tick--);
}
else
{
while(true)
{
show(); //这里没有加this,为什么又可以?
}
}
}
}
}
public synchronized void show()
{
if(tick>0)
{
try
{ Thread.sleep(10);
}
catch(Exception e)
{
}
System.out.println(Thread.currentThread().getName+tick--);
}
}
}
class StaticMethDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
}
}
|