我想输出的是1 2 A 3 4 B 5 6 C..........X 49 50 Y51 52 Z,结果他输出到1 2 就停住了..下面是程序 出了什么问题么,
public class TestThread{
public static void main(String args[]){
Class1 c1=new Class1();
Class2 c2=new Class2();
c2.start();
c1.start();
}
}
class Class1 extends Thread{
CC c=new CC();
public void run(){
c.letter();
}
}
class Class2 extends Thread{
CC c=new CC();
public void run(){
c.number();
}
}
class CC{
int i;
int j;
synchronized void number(){
for(j=0;j<52;j++){
if(j>0&&j%2==0){
try{
this.wait();
}catch(InterruptedException e){
}
}
System.out.print((j+1)+" ");
if(j>0&&j%2==1)this.notify();
}
}
synchronized void letter(){
for(i=0;i<26;i++){
try{
this.wait();
}catch(InterruptedException e){
}
System.out.print((char)(i+65)+" ");
this.notify();
}
}
}
java多线程中synchronized wait() 跟notify()方法的用法
答案:2 悬赏:20 手机版
解决时间 2021-02-24 23:47
- 提问者网友:且恨且铭记
- 2021-02-24 09:01
最佳答案
- 五星知识达人网友:走死在岁月里
- 2021-02-24 10:30
你是想把number()和letter()加锁,然后通过控制线程调用来达到输出顺序。
但是,问题是,你给不同的方法加锁,另一方法里notify()只会唤醒本方法的线程。
所以一个方法wait(),没有程序来notify()这个线程,这个线程一直处于等待。。所以这也是程序一直在运行的原因。
办法 :用一个锁。。。
但是,问题是,你给不同的方法加锁,另一方法里notify()只会唤醒本方法的线程。
所以一个方法wait(),没有程序来notify()这个线程,这个线程一直处于等待。。所以这也是程序一直在运行的原因。
办法 :用一个锁。。。
全部回答
- 1楼网友:鱼芗
- 2021-02-24 11:11
好像是通知其他出于wait状态的线程说我已经用完了,你们可以继续接着使用cpu了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯