多线程问题~~~~~~~~~~

jingulang 2008-06-20 04:58:15
我写2个线程,线程1一直执行,线程2不定时执行,当线程2想执行时,线程1就要停下来让线程2执行。

我像下面这么写行吗? 这不能让这两个线程同时执行,用synchronized没错吧

可我一执行程序就java.lang.IllegalMonitorStateException。指定错误行数是wait()和notify()这两行都错了

谁能指点一下~~~~~谢谢



public class Test
{
Object o = new Object();
boolean b = false;

public static void main(String[] args)
{
new Thread(new Thread1()).start();
new Thread(new Thread2()).start();
}

private class Thread1 implements Runnable
{
public void run()
{
a();
}
private void a() throws InterruptedException
{
synchronized(o)
{
if(b)
{
wait();
}
//执行内容
}
}
}


private class Thread2 implements Runnable
{
public void run()
{
b();
}

private void b() throws InterruptedException
{
b = true;

synchronized(o)
{
//执行内容
b = false;
notify();
}

}
}
}
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingulang 2008-06-20
  • 打赏
  • 举报
回复
晕啊~~~~~~~明白了 结贴喽~~~~~~谢谢二位
cnoolon 2008-06-20
  • 打赏
  • 举报
回复
改为o.wait()和o.notity()
J_Factory 2008-06-20
  • 打赏
  • 举报
回复
对象锁搞错当然要有异常了,在synchronized里的wait ,notify要由对象锁所调用,
你写的是Test类来调用。
jingulang 2008-06-20
  • 打赏
  • 举报
回复
对啊 那为什么有java.lang.IllegalMonitorStateException异常啊
J_Factory 2008-06-20
  • 打赏
  • 举报
回复
大家都是在用o对象对象锁,进程间的同步是对对象锁来讲的。
换就话说,对象锁管理进程间的同步。。。
jingulang 2008-06-20
  • 打赏
  • 举报
回复
没懂啊

wait()是不是停止当前线程 然后释放多持有o这个对象的锁

感觉没什么错啊。。。
J_Factory 2008-06-20
  • 打赏
  • 举报
回复
wait和notify这两方法要由o来调用。。。。。
jingulang 2008-06-20
  • 打赏
  • 举报
回复
怎么没人知道。。。。。。。。。。。。。。。。。。。。
jingulang 2008-06-20
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
jingulang 2008-06-20
  • 打赏
  • 举报
回复
不好意思写错了

不是“这不能让这两个线程同时执行” 而是不让这两个线程同时执行,

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧