这里的this就是当前对象,我举个例子啊 class A implements Runnable{ public void run(){ synchronized(this){
} }} class B{ public static void main(String args[]){ A a = new A(); Thread b = new Thread(a); b.start(); synchronized(a){ } }这里的this,和a 就是同一个对象,你在这两个同步方法快里面试验一下,就会看出来,二者用的是同一把锁 }
这是一个关于死锁的例子,当我把下面程序中的Synchronized(this)改成Synchronized(obj)时就不死锁了,程序一直在运行,无法结束,那这里的Synchronized(this)中的this指的是哪个对象啊,不懂啊,哪位高手指点一下啊,谢谢
class ThreadTest{
public static void main(String args[])
{
Mythread mt=new Mythread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
class Mythread implements Runnable
{
Object obj=new Object();
//Object obj1=new Object();
int tickets=100;
boolean flag=false;
public void run()
{
if(flag=true)
sell(obj);
while(true)
{
flag=true;
synchronized(obj)
{
try
{
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+",我已经休息了!");
synchronized(this)
{
System.out.println("我把this监视了!");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
public synchronized void sell(Object obj)
{
synchronized (obj)
{
if(tickets>0)
{
try
{
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"我已经休息了!");
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("sell():"+Thread.currentThread().getName()+"sell tickets:"+tickets);
tickets--;
}
}
}
}
class A implements Runnable{
public void run(){
synchronized(this){
}
}}
class B{
public static void main(String args[]){
A a = new A();
Thread b = new Thread(a);
b.start();
synchronized(a){ }
}这里的this,和a 就是同一个对象,你在这两个同步方法快里面试验一下,就会看出来,二者用的是同一把锁
}