永发信息网

java多线程中synchronized wait() 跟notify()方法的用法

答案:2  悬赏:20  手机版
解决时间 2021-02-24 23:47
我想输出的是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();
}
}
}
最佳答案
你是想把number()和letter()加锁,然后通过控制线程调用来达到输出顺序。
但是,问题是,你给不同的方法加锁,另一方法里notify()只会唤醒本方法的线程。
所以一个方法wait(),没有程序来notify()这个线程,这个线程一直处于等待。。所以这也是程序一直在运行的原因。
办法 :用一个锁。。。
全部回答
好像是通知其他出于wait状态的线程说我已经用完了,你们可以继续接着使用cpu了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么农村人不喜欢女孩子?
美耐皿是什么
杜甫的和李白是什么时候,在什么地方认识的?
桃蹊加油站这个地址在什么地方,我要处理点事
如何写专利?
iPhone 6打开拍照功能可以检测到红外线吗?
高一学生小涛参加区人大代表的选举时,社区领
阳坡滩子我想知道这个在什么地方
小月亮国际双语幼儿园-西湖俪景分园在什么地
一个月两千块钱,我应该怎么理财
铂金戒指调换的问题
【寒食节是为了纪念谁】寒食节是为了纪念谁
小P孩时尚童装地址在什么地方,想过去办事
新买一只猫,对我特凶,老是对我哈气拍爪子,
1、“坐地日行八万里,巡天遥看一千河”适用于
推荐资讯
海之蓝商务旅馆在什么地方啊,我要过去处理事
我厂一个产品是轴承钢的外径需要焊接(就是轴
氟牙症Dean分类的依据不包括A.饮水氟浓度B.釉
为什么大气中二氧化碳浓度有日变化和年变化?
湖南华跃金属制品有限公司在什么地方啊,我要
移动的号码开通了国际长途业务,打电话去美国
种子农药在什么地方啊,我要过去处理事情
记忆枕,荞麦枕,化纤枕,乳胶枕,羽绒枕各有
黄芪与茯苓配伍,茯苓能增强黄芪补气利水的功
S320/G319(路口)在哪里啊,我有事要去这个地
唱歌时气短怎么报办?
路由器管理密码是多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?