如何实现线程之间共享一个变量。 我做了一个多线程程序想让每个线程都能互相通信请问怎么实现。最好能举个例子谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如何实现线程之间共享一个变量。对于这个问题利用同步方法就可以实现了。下面我给我写的一个很简单的例子://///////////////////////////////////线程同步////////////////////////////////////class Message{ private String message=null; private boolean hasMessage=false; Message(String message){ this.message=message; hasMessage=true; } public synchronized boolean hasMessage(){ return hasMessage; } public synchronized void setMessage(String message){ while(hasMessage) { try { wait(); } catch(InterruptedException ie) { ie.printStackTrace(); } } this.message=message; this.hasMessage=true; notifyAll(); } public synchronized String getMessage(){ while(!hasMessage) { try { wait(); } catch(InterruptedException ie) { ie.printStackTrace(); } } this.hasMessage=false; notifyAll(); return message; } } public class Threads extends Thread{private String name=null;private boolean isCustomer=false;private Message message;Threads(String name,Message message,boolean isCustomer){ this.message=message; this.name=name; this.isCustomer=isCustomer;}public void run(){ String strTemp=null; int cycCount=0; while(cycCount++<100){ if(isCustomer) { strTemp=message.getMessage(); System.out.println("Thread "+name+" "+strTemp); } else { strTemp="Message "+cycCount; message.setMessage(strTemp); System.out.println("Thread "+name+" "+strTemp); } }}public static void main(String args[]) { System.out.println("Complied OK!"); Message msg=new Message("Init Message!"); Threads[] customer=new Threads[20]; Threads[] producter=new Threads[20]; for(int i=0;i<20;i++) { customer[i]=new Threads("customer"+i,msg,true); producter[i]=new Threads("producer"+i,msg,false); } for(int i=0;i<20;i++){ customer[i].start(); producer[i].start(); } }} 不好意思由于我临时修改了一点东西,上面的例子中有一个错误。就是请你把producter这个错误的单词先全部替换为producer。主要就是在main方法中。希望对你理解线程同步有一点帮助。 你可以用一个类(class Total)来实现生产者消费者的所有功能。该类实现Runnable接口。然后在主线程程里创建一个该类的实例(ct)。然后用Thread t1=new Thread(ct);t2=new Thread(ct);这样Total类里面的所有全局变量都将被两个线程共享 关于Boolean传值的一个问题,不明白?大家帮助一下! installanywhere 生成好的应用程序用不了 java -p java中怎么实现静态局部变量? 如何将存储在内存中的数据结构直接导出到硬盘上? 鼠标事件的响应,帮忙额。。。。。 求教 文件保存用户信息,然后读取信息的方法 Java application 直连数据库方式下的数据保存处理有那些方式方法 jsp连接oracle( 不用安装jdbc 又不用配odbc)?? 从C++转学JAVA困难否? 提供较全的Oreilly书籍下载,顺便进行本月第二次散分(来者有分) 来看看透明窗体制作????
对于这个问题利用同步方法就可以实现了。
下面我给我写的一个很简单的例子:
//////////////////////////////////
///线程同步
////////////////////////////////////
class Message{
private String message=null;
private boolean hasMessage=false;
Message(String message){
this.message=message;
hasMessage=true;
}
public synchronized boolean hasMessage(){
return hasMessage;
}
public synchronized void setMessage(String message){
while(hasMessage)
{
try
{
wait();
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
}
this.message=message;
this.hasMessage=true;
notifyAll();
}
public synchronized String getMessage(){
while(!hasMessage)
{
try
{
wait();
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
}
this.hasMessage=false;
notifyAll();
return message;
}
}
public class Threads extends Thread{
private String name=null;
private boolean isCustomer=false;
private Message message;Threads(String name,Message message,boolean isCustomer){
this.message=message;
this.name=name;
this.isCustomer=isCustomer;
}public void run(){
String strTemp=null;
int cycCount=0;
while(cycCount++<100){
if(isCustomer)
{
strTemp=message.getMessage();
System.out.println("Thread "+name+" "+strTemp);
}
else
{ strTemp="Message "+cycCount;
message.setMessage(strTemp);
System.out.println("Thread "+name+" "+strTemp);
}
}
}public static void main(String args[])
{
System.out.println("Complied OK!");
Message msg=new Message("Init Message!");
Threads[] customer=new Threads[20];
Threads[] producter=new Threads[20];
for(int i=0;i<20;i++)
{
customer[i]=new Threads("customer"+i,msg,true);
producter[i]=new Threads("producer"+i,msg,false);
}
for(int i=0;i<20;i++){
customer[i].start();
producer[i].start();
}
}}