黑马程序员技术交流社区
标题:
大家帮帮忙
[打印本页]
作者:
唐志海
时间:
2013-11-21 16:03
标题:
大家帮帮忙
本帖最后由 唐志海 于 2013-11-21 18:19 编辑
而且按道理说这题我用signal()没有用singalAll()的话t1,t,t2,t3都会出现等待状态,但是我一运行缺没有出现这么个情况。。不知道这是什么情况??
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class cursom
{
private String name;
private boolean flag=false;
private String sex;
private Lock lock=new ReentrantLock();
private Condition con=lock.newCondition();
public void set(String name,String sex) throws InterruptedException
{
lock.lock();
try{
while(flag)
con.await();
this.name=name;
this.sex=sex;
flag=true;
con.signal();
}
finally
{
lock.unlock();
}
}
public void prit()throws InterruptedException
{
lock.lock();
try{
while(!flag)
con.await();
System.out.println(name+"....."+sex);
flag=false;
con.signal();
}
finally {
lock.unlock();
}
}
}
class Print implements Runnable
{
private cursom r;
Print(cursom r)
{
this.r=r;
}
public void run()
{
int x=0;
//为什么上面set方法抛出了异常,而这边都没有处理都可以运行,反而是用try...catch处理了反而出现编译错误。
while(true)
{
if(x==0)
System.out.println("tt"+"....."+"feman");
else
System.out.println("李四"+"....."+"男");
x=(x+1)%2;
}
}
}
class Out implements Runnable
{
private cursom r;
Out(cursom r)
{
this.r=r;
}
public void run()
{
try {
r.prit();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class lockDemo {
public static void main(String[] args)
{
cursom r=new cursom();
Print in=new Print(r);
Out ou=new Out(r);//由于越界了,所以下面的代码是定义两个in的线程,两个ou的线程并启动。
<blockquote>Thread t=new Thread(in)
复制代码
作者:
汪洋大海
时间:
2013-11-21 16:43
你的代码没有写完吧。而且完全看不懂。。格式要写好呀。
一百多行的代码,没有注释,如果过一个月之后你再看这个,你就明白了。。
作者:
likeermei
时间:
2013-11-22 01:16
这种提问很难回答 要标注代码出错的位置和错误提示 还有就是你对错误的不解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2