黑马程序员技术交流社区
标题:
关于线程加锁
[打印本页]
作者:
苑桥别馆
时间:
2014-12-6 14:22
标题:
关于线程加锁
class Input implements Runnable//实现Runnable接口
{
private IO io;
public Input(IO io){//传递IO的引用,设置IO引用中的值
this.io=io;
}
public void run(){//复写run()方法
boolean flag=true;
while(true){//使用while-if-else一直对IO引用循环交替赋值
synchronized(Object.class){
if(io.iswait)
try{io.wait();}catch(Exception e){}
if(flag){
io.name="小明";
io.sex="男";
flag=false;
}
else{
io.name="Lili";
io.sex="female";
flag=true;
}
io.iswait=true;
io.notify();
}
}
}
};
class Output implements Runnable
{
private IO io;
public Output(IO io){//传递IO的引用,获取IO引用中的值
this.io=io;
}
public void run(){
while(true){
synchronized(Object.class){//输出IO的值100次
if(!io.iswait)
try{io.wait();}catch(Exception e){}
System.out.println(io.name+"----"+io.sex);
io.iswait=false;//设置当前为等待
io.notify();//唤醒
}
}
}
};
class IO
{
String name;
String sex;
boolean iswait=false;
};
class IoWaitMain
{
public static void main(String[] args)
{
IO io=new IO();
Input in=new Input(io);//创建要加入线程的引用
Output out=new Output(io);
Thread t1=new Thread(in);//将对象加入线程
Thread t2=new Thread(out);
Thread t3=new Thread(in);
Thread t4=new Thread(out);
t1.start();//开启线程
t2.start();
//t3.start();
//t4.start();
}
}
复制代码
在上面代码中,为什么synchronized加的锁要和wait的锁一样?
作者:
Mr.Ni
时间:
2014-12-6 16:28
wait()方法是锁的方法,表示让持有该锁的线程执行等待操作
作者:
苑桥别馆
时间:
2014-12-7 14:30
Mr.Ni 发表于 2014-12-6 16:28
wait()方法是锁的方法,表示让持有该锁的线程执行等待操作
谢谢你的回答,我已经明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2