我做了一个多线程程序想让每个线程都能互相通信请问怎么实现。
最好能举个例子
谢谢了

解决方案 »

  1.   

    如何实现线程之间共享一个变量。
    对于这个问题利用同步方法就可以实现了。
    下面我给我写的一个很简单的例子:
    //////////////////////////////////
    ///线程同步
    ////////////////////////////////////
    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();
    }
    }}
      

  2.   

    不好意思由于我临时修改了一点东西,上面的例子中有一个错误。就是请你把producter这个错误的单词先全部替换为producer。主要就是在main方法中。希望对你理解线程同步有一点帮助。
      

  3.   

    你可以用一个类(class Total)来实现生产者消费者的所有功能。该类实现Runnable接口。然后在主线程程里创建一个该类的实例(ct)。然后用Thread t1=new Thread(ct);t2=new Thread(ct);这样Total类里面的所有全局变量都将被两个线程共享