这题我主要是Form A如何监听和线程间的监听我不太清楚,有谁来帮帮我啊~~~

解决方案 »

  1.   

    进程是操作系统中的一种数据结构,包含内存 文件句柄 线程等系统对象和资源,一个运行着的程序实例就可以看作一个进程.进程有私有的内存空间,不同进程之间内存空间不能互相访问.
    线程可以理解为属于进程的某段执行着的代码流.同属于一个进程的线程之间可以共享进程的内存空间,系统资源.每个线程有属于自己的堆栈空间
    操作系统调度切换多个线程要比调度切换进程在速度上快得多.而且进程间内存无法共享,通讯也比较麻烦.进程之间由于共享进程内存空间,所以交换数据非常方便
    在windows中,进程和线程是不同的核心对象,一个进程必须要有一个进程;而在一些LINUX/UNIX中,线程的实现是通过一些多线程代码库来完成,在OS看来还是一个个的进程;在SOLARIS中,折中一个进程可以拥有多个轻量级进程,一个轻量级进程可以拥有多个线程
    JAVA中可以用两种办法来实现多线程:继承Thread类或实现Runnable接口
    java用Tread类来实现对线程的封装。一旦创建了一个Tread类实例,JVM就会为你创建一个线程。在JAVA语言中,这是创建线程的唯一办法。一旦调用了Tread类的start()方法,线程就运行起来了
    Runnable接口为那些想参与到Tread运行中的JAVA类提供了一个通用的接口,只要是实现了Runnable接口的JAVA类,就能够作为Tread的执行体,在多线程中运行;其定义了一个方法:public void run();
    如果用C语言来写WINDOWS平台下的线程应用,则通过系统函数CreateThread()来创建一个线程,在调用该函数时得指定一个函数入口作为线程的执行体,当线程运行的时候,其执行目标就是创建该线程时传入的那个函数;其原型为:long thread_start_routine(void*);
      

  2.   

    线程间通讯,我还没有学习到这里。
    只学习了构造新线程的方法。帮你UPUP
      

  3.   

    不是什么监听,第一个Frame实际上也是一个线程,
    所谓传递,实际上就是线程间共享对象。
    我把源代码写出来算了,供楼主参考。import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;public class Thread0 extends JFrame implements Runnable, ActionListener {    private SharedObject so;
        private int number;    public Thread0(SharedObject so, int number) {
            this.so = so;
            this.number = number;
            init();
        }    void init() {
            JButton b = new JButton("Click Me");
            b.addActionListener(this);
            getContentPane().add(b);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocation(300, 200);
            pack();
            show();
        }    public void actionPerformed(ActionEvent ae) {
            new Thread(this).start();
            Thread1 t1 = new Thread1(so, 1);
            Thread2 t2 = new Thread2(so, 2);
            t1.start();
            t2.start();
            so.put(0, "Hello World");
        }    public void run() {
            String s = so.get(0);
            System.out.println("get in thread " + number + ": " + s);
            JOptionPane.showMessageDialog(this, s);
        }
        
        public static void main(String[] args) {
            SharedObject so = new SharedObject();
            Thread0 t0 = new Thread0(so, 0);
            t0.show();
        }}//////
    public class Thread1 extends Thread {    private SharedObject so;
        private int number;    public Thread1(SharedObject so, int number) {
            this.so = so;
            this.number = number;
        }    public void run() {
            String s = so.get(1);
            System.out.println("get in thread " + number + ": " + s);
            so.put(1, s);
        }
    }
    ///////////////
    public class Thread2 extends Thread {    private SharedObject so;
        private int number;    public Thread2(SharedObject so, int number) {
            this.so = so;
            this.number = number;
        }    public void run() {
            String s = so.get(2);
            System.out.println("get in thread " + number + ": " + s);
            so.put(2, s);
        }
    }
    /////////////
    public class SharedObject {
        
        private String contents;
        private boolean[] available = new boolean[3];    public synchronized String get(int i) {
            while (!available[i]) { // no new contents put by Producer
                try {
                    wait();
                } catch (InterruptedException e) {
                }
            }
            available[i] = false;
            return contents;
        }
        
        public synchronized void put(int i, String value) {
            contents = value;
            if(i == 0){
                available[1] = true;
            }else if(i == 1){
                available[2] = true;
            }else if(i == 2){
                available[0] = true;
            }
            notifyAll();
        }
    }
      

  4.   

    1、其他语言
    先定义消息号,及处理此消息的函数,然后用postmessage函数发消息。
    2、在java里定义全局变量,在每个线程里检测全局变量。
      

  5.   

    abstract class MessageTheadInterface {
      protected String message = "";
      protected MessageTheadInterface to;  public void sendMessage(MessageTheadInterface thread, String message) {
        thread.receiveMessage(message);
      }  public void receiveMessage(String message) {
        this.message = message;
      }  public String getMessage() {
        return message;
      }  public void setMessage(String message) {
        this.message = message;
      }  public void setToThread(MessageTheadInterface to) {
        this.to = to;
      }
    }public class MyThread
        extends MessageTheadInterface
        implements Runnable {
      Thread self;  public MyThread() {
        self = new Thread(this);
      }  public void start() {
        self.start();
      }  public void run() {
        System.out.println("a");
        sendMessage(to, message);
        while (!isStopIt()) {
          try {
            self.sleep(2000);
          }
          catch (InterruptedException e) {}
        }
      }  public boolean isStopIt() {
        if ("p".equals(message)) {
          System.out.println("receive p, end");
          return true;
        }
        return false;
      }  public static void main(String[] args) {
        MyThread a = new MyThread();
        MyThreadB b = new MyThreadB();
        MyThreadC c = new MyThreadC();    a.setMessage("m");
        a.setToThread(b);
        b.setToThread(c);
        c.setToThread(a);    c.start();
        b.start();
        a.start();
      }
    }class MyThreadB
        extends MessageTheadInterface
        implements Runnable {
      Thread self;  public MyThreadB() {
        self = new Thread(this);
      }  public void start() {
        self.start();
      }  public void run() {
        System.out.println("b");    while (!isStopIt()) {
          try {
            self.sleep(3000);
          }
          catch (InterruptedException e) {}
        }
      }  public boolean isStopIt() {
        if ("m".equals(message)) {
          System.out.println("receive m. then send n");
          sendMessage(to, "n");
          return true;
        }
        return false;
      }
    }class MyThreadC
        extends MessageTheadInterface
        implements Runnable {
      Thread self;  public MyThreadC() {
        self = new Thread(this);
      }  public void start() {
        self.start();
      }  public void run() {
        System.out.println("c");    while (!isStopIt()) {
          try {
            self.sleep(4000);
          }
          catch (InterruptedException e) {}
        }
      }  public boolean isStopIt() {
        if ("n".equals(message)) {
          System.out.println("receive n , then send p");
          sendMessage(to, "p");      return true;
        }
        return false;
      }
    }
      

  6.   

    写完了, 才看到 usabcd(9号公路上的3名共军)的代码, 好多了, 佩服