黑马程序员技术交流社区
标题:
同步代码块的锁问题?????
[打印本页]
作者:
HM汪磊
时间:
2013-3-23 00:07
标题:
同步代码块的锁问题?????
本帖最后由 HM汪磊 于 2013-3-23 10:43 编辑
class Res
{
String sex;
String name;
}
class InPut implements Runnable
{
private Res r;
InPut(Res t)
{
this.r=t;
}
public void run()
{
int x=0;
while(true)
{
synchronized(InPut.class)//同步代码块锁为对象,静态同步函数锁为类名.class.为什么这里同步代码块用类名.class也可以呢????
{
if(x==0)
{
r.name="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex="女女女女女女";
}
x=(x+1)%2;
}
}
}
}
class OutPut implements Runnable
{
private Res r;
OutPut(Res t)
{
this.r=t;
}
public void run()
{
while(true)
{
synchronized(InPut.class)
{
System.out.println(r.name+"....."+r.sex);
}
}
}
}
class Test99
{
public static void main(String[] args)
{
Res r=new Res();
InPut n=new InPut(r);
OutPut m=new OutPut(r);
Thread t1=new Thread(n);
Thread t2=new Thread(m);
t1.start();
t2.start();
}
}
作者:
谭辉
时间:
2013-3-23 01:12
只是说静态同步函数的锁只能为类名.class.
并没有说同步函数不能用类名.class.
同步函数的锁要用对象,而类名.class也是一个对象
作者:
魏福伟
时间:
2013-3-23 07:54
只要写个对象就行,静态同步代码快只能为.class。非静态的写个对象就行
作者:
zjm10zj
时间:
2013-3-23 09:11
这是有关于线程同步的问题,使用ReentrantLock类的lock()和unlock()方法进行同步,希望能有帮助
作者:
张昶
时间:
2013-3-23 11:21
同步函数的锁要用对象,而类名.class也是一个对象。而你可以先创建一个对象啊,如:Object obj = new Object();,然后在synchronized()中,放入对象obj。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2