黑马程序员技术交流社区
标题:
死锁同步的小疑惑!
[打印本页]
作者:
赵家阳
时间:
2012-10-12 16:02
标题:
死锁同步的小疑惑!
本帖最后由 赵家阳 于 2012-10-15 23:32 编辑
class Test2 implements Runnable
{
private boolean flag;
Test2(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
synchronized(MyLock1.locka)
{
System.out.println(Thread.currentThread().getName()+"----if locka");
synchronized(MyLock1.lockb)
{
System.out.println(Thread.currentThread().getName()+"----if lockb");
}
}
}else{
synchronized(MyLock1.lockb)
{
System.out.println(Thread.currentThread().getName()+"----else lockb");
synchronized(MyLock1.locka)
{
System.out.println(Thread.currentThread().getName()+"----else locka");
}
}
}
}
}
class MyLock1
{
/**
* 为什么synchronized的参数是一个对象呢?
*/
static Object locka = new Object();
static Object lockb = new Object();
}
public class DeadLockTest1 {
public static void main(String[] args)
{
Thread t1 = new Thread(new Test2(true));
Thread t2 = new Thread(new Test2(false));
t1.start();
t2.start();
}
}
复制代码
synchronized的参数有时是this,有时可以为“类名.class”,有时还是一个对象,那么,synchronized的参数到底是怎样的?请高手详解!
作者:
李建强
时间:
2012-10-12 16:25
本帖最后由 李建强 于 2012-10-12 16:27 编辑
synchronized 是一个关键字,不是方法。
有两种用法:synchronized方法、synchronized代码块。
你就把那个对象当一个门
加上synchronized就相当于给门加了一把锁就行了。
作用是同一时刻最多一个线程执行这段代码。
this,类名.class这些都是对象。
至于更详细的,慢慢来,写多了看着也累。
作者:
曾浩
时间:
2012-10-12 16:28
本帖最后由 曾浩 于 2012-10-12 16:30 编辑
同步代码块时synchronized的参数是传入一个对象
同步一般函数时锁是this 但是this也是一个对象啊
同步静态方法时锁是 类名.class 类名.class 也是一个对象 他是 Class类型的对象
作者:
王乐
时间:
2012-10-13 13:40
首先要明确自己定义的同步的锁是什么,否则是无法应用的
当使用同步代码块的时候,synchronized的参数是可以自定义的。
当使用同步方法的时候如果被同步的方法是非静态的,那默认的synchronized的锁就是this(也就是说,如果你的代码中想要1个非静态方法和1个段码块实现同步的话。那先确定了调用他们的对象是同一对象后,在定义方法的时候声明了synchronized。 而在定义同步代码块的时候就应该设置参数为(this)。因为非静态方法synchronized的锁是this。 这样他们才能实现同步
静态方法同理。
作者:
刘 佳
时间:
2012-10-13 15:34
synchronized的参数有时是this,有时可以为“类名.class”,有时还是一个对象,那么,synchronized的参数到底是怎样的?
当在同步函数中时,synchronized的锁就是this,这个函数是指非静态函数。
当在静态同步函数中时,synchronized的锁是该类的字节码文件对象,即类名.class
在synchronized同步代码块中,这个锁是任意对象。
应该注意的是,构成同步成功的前提。 一是有两个或以上的线程。二是这些线程用的是同一把锁。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2