为什么这段代码不能实现线程同步? 如果你的kg不是正确的状态你在同步方法里要调用wait(),让线程挂起啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把生产者和消费者的属性改成:private static kz;因为生产者和消费者共享资源时才有生产者和消费者问题.而且get和put只能对某个类对象同步,而不是对任意多个类对象同步. 请问楼主要怎样的效果,该代码已经是线程同步了,每个get和put操作都已经保证了对kz对象的唯一操作 //改成这样吧public class cls1 { //总控制 public static void main(String args[]){ cls4 kz=new cls4(); cls2 sc=new cls2(kz); cls3 xf=new cls3(kz); sc.start() ; xf.start() ; }}class cls2 extends Thread{ //生产者 cls4 kz; public cls2(cls4 kz) { this.kz=kz; } public void run(){ synchronized(kz){ for(int i=0 ;i<10;i++){ this.kz.put(i) ; kz.notify(); try{ kz.wait(); }catch(Exception e){} } } }}class cls3 extends Thread { //消费者 cls4 kz; public cls3(cls4 kz) { this.kz=kz; } public void run(){ synchronized(kz){ for(int i=0;i<10;i++){ System.out.println(kz.get()) ; kz.notify(); try{ kz.wait(); }catch(Exception e){} } } }}class cls4 { private int val; private boolean kg=false ; //控制变量 public int get(){ kg=false; return val; } public void put(int i){ val=i; kg=true; }} public class cls1 { //总控制 public static void main(String args[]){ cls4 kz=new cls4(); cls2 sc=new cls2(kz); cls3 xf=new cls3(kz); sc.start() ; xf.start() ; }}public class cls2 extends Thread{ //生产者 cls4 kz; public cls2(cls4 kz) { this.kz=kz; } public void run(){ for(int i=0 ;i<10;i++){ if(kz.getKZ()==false) this.kz.put(i) ; } }}public class cls3 extends Thread { //消费者 cls4 kz; public cls3(cls4 kz) { this.kz=kz; } public void run(){ for(int i=0;i<10;i++){ if(kz.getKZ()) System.out.println(kz.get() ) ; } }}public class cls4 { private int val; private boolean kg=false ; //控制变量 public synchronized int get(){ kg=false; return val; } public synchronized void put(int i){ val=i; kg=true; } public boolean getKZ() { return kz; } } 急求解 GUI的相关问题 Jboss启动时提示错误,无法解析server目录下的文件 关于简单计算器的监听器设置 如何获取tomcat中有多少个servlet在内存中 小问题请java哥帮忙 最基础的问题,3P (public protected private)问题 请教大家怎样可以比较好的保护class文件???有没有比obfuscator更好一些的方法 我的程序编译时提示找不到class,什么地方有啊? 关于windows系统下java的回车和换行符的问题 请问有没有JB7的中文教程,高分相求!(400分) 如何有效的在java应用程序中画图(就是显示图片)
public class cls1 { //总控制
public static void main(String args[]){
cls4 kz=new cls4();
cls2 sc=new cls2(kz);
cls3 xf=new cls3(kz);
sc.start() ;
xf.start() ;
}
}class cls2 extends Thread{ //生产者
cls4 kz;
public cls2(cls4 kz) {
this.kz=kz;
} public void run(){
synchronized(kz){
for(int i=0 ;i<10;i++){
this.kz.put(i) ;
kz.notify();
try{
kz.wait();
}catch(Exception e){}
}
}
}
}class cls3 extends Thread { //消费者
cls4 kz;
public cls3(cls4 kz) {
this.kz=kz;
} public void run(){
synchronized(kz){
for(int i=0;i<10;i++){
System.out.println(kz.get()) ;
kz.notify();
try{
kz.wait();
}catch(Exception e){}
}
}
}
}
class cls4 {
private int val;
private boolean kg=false ; //控制变量
public int get(){
kg=false;
return val;
} public void put(int i){
val=i;
kg=true;
}
}
public static void main(String args[]){
cls4 kz=new cls4();
cls2 sc=new cls2(kz);
cls3 xf=new cls3(kz);
sc.start() ;
xf.start() ; }}public class cls2 extends Thread{ //生产者
cls4 kz;
public cls2(cls4 kz) {
this.kz=kz;
} public void run(){
for(int i=0 ;i<10;i++){
if(kz.getKZ()==false)
this.kz.put(i) ;
} }}
public class cls3 extends Thread { //消费者 cls4 kz;
public cls3(cls4 kz) {
this.kz=kz;
}
public void run(){
for(int i=0;i<10;i++){
if(kz.getKZ())
System.out.println(kz.get() ) ;
}
}}
public class cls4 {
private int val;
private boolean kg=false ; //控制变量
public synchronized int get(){
kg=false;
return val; } public synchronized void put(int i){
val=i;
kg=true;
}
public boolean getKZ()
{
return kz;
}
}