涉及到线程同步问题,这三个词弄不明白了,高手给讲解下,举例更好。谢谢。
解决方案 »
- 那位项目高手给解释一下,java 到底能干什么?
- oracle与sybase 数据移植到问题
- 如何将int数组中得值保存为一个文件,然后再一个一个从文件中读去出来保存到一个新数组中
- 急!!!java串口通讯问题,“CommPortIdentifier.getPortIdentifiers()取得端口列表为空”的问题。
- 关于全半角的转换
- 加载applet程序错误,帮我看看什么问题..
- 一个聊天的服务器程序的改写 谁能帮我解决这个问题啊!!!??
- 在JBlider5里,我设置了断点,为什么不能跟踪?立刻给分
- java初学者
- MyEclipse问题
- new StringBuffer().append("a"),其中"a"会放入常量池中不
- URLConnection类向本地文件中写数据的问题
wait 将本线程放入等待池中 如果没有notify唤醒就不能重新放入等待池中执行本线程
notify 唤醒在等待池中的线程
但wait不想sleep和suspended同是对线程等待停止执行,但是wait却可以释放同步锁。就是synchronized。
所以通常情况下,wait用在synchronized内使用。
int i = 0;
synchronized void aaa(){
i++;
}
synchronized void AAA(){
i=i+2;
}
}class B extends Thread {
aaa A ;
B(aaa A){this.A = A};
void run(){
A.aaa();
}
}class C extends Thread{
aaa A ;
C(aaa A){this.A = A};
void run(){
A.AAA();
}
}public class D {
main(){
b.start();
c.start();
}
}简单写了,能看懂就行。问题1:aaa中,两个方法都锁定了,是不是B或者C任意一个线程执行其中一个方法时,另一个线程就不可以执行这两个方法?只能排队等待前一个线程执行完。
问题2:aaa中,如果其中一个方法中有wait,那么是不是当前在aaa上的线程要挂起,不再继续执行,等待其他线程执行notify?这样的话,根据前面说的,这个线程无法完成,他在执行当前方法,另一个线程在等待他执行完方法,这样是不是就死了?另,关于这三个概念,请高手不要拘泥于我这两个问题,尽可能的讲明白。
wait和notify就是解决死锁的 不知道怎么就死了
而且不太理解什么叫“线程无法完成” wait和notify是对同一个对象锁而言的
执行wait方法 线程进入暂时休眠状态 暂时释放所持对象锁
其他需要锁的线程就有执行的机会
当执行notify的时候 唤醒当前休眠线程
它就可以竞争当前锁 继续执行
问题2:wait会释放锁,让出cpu使用权
2、wait 阻塞当前线程,但会释放资源锁;
3、wait 后当前线程进入到等待队列,其他线程调用notify后当前线程进入就绪状态,获得cpu时间 后可以继续执行
wait()是Object中的方法,用于线程等待
notify()也是Object中的方法,用于线程唤醒