⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectmsgdemo.java

📁 演示win32的socket 通讯 八皇后的改进算法 并发Concurrency的JAVA实现 applet演示鼠标的点击时间和显示图象 手机J2ME的多线程演示
💻 JAVA
字号:
//@author: j.n.magee 11/11/96
package concurrency.message;

import java.awt.*;
import java.applet.*;
import concurrency.display.*;

public class SelectMsgDemo extends Applet {

    ThreadPanel arrivals;
    ThreadPanel departures;
    ThreadPanel carpark;
    StringCanvas cardisp;

    public void init() {
        setLayout(new BorderLayout());
        Panel p = new Panel();
        p.add(arrivals   =new ThreadPanel("Arrivals",Color.blue,false));
        p.add(carpark    =new ThreadPanel("CarPark",Color.blue,false));
        p.add(departures =new ThreadPanel("Departures",Color.blue,false));
        cardisp = new StringCanvas("Carpark State",Color.cyan);
        cardisp.setSize(470,100);
        add("Center",cardisp);
        add("South",p);
     }

    public void start() {
        Channel arrive = new Channel();
        Channel depart = new Channel();
        arrivals.start(new MsgGate(arrive));
        departures.start(new MsgGate(depart));
        carpark.start(new MsgCarPark(arrive,depart,cardisp,4));
    }

    public void stop() {
        arrivals.stop();
        departures.stop();
        carpark.stop();
    }

}


/********************************************************/

class MsgGate implements Runnable {

    private Channel chan;
    private Object signal = new Object();

    public MsgGate (Channel c) {chan=c;}

    public void run() {
        try {
          while(true)  {
            ThreadPanel.rotate(12);
            chan.send(signal);
            ThreadPanel.rotate(348);
          }
        } catch (InterruptedException e){}
    }
}

/********************************************************/

class MsgCarPark implements Runnable {
  private Channel arrive,depart;
  private int spaces,N;
  private StringCanvas disp;

  public MsgCarPark(Channel a, Channel l, StringCanvas d,int capacity) {
    depart=l; arrive=a;
    N=spaces=capacity;
    disp = d;
    disp.setString("Cars: "+0+"   Spaces: "+spaces);
  }

  private void display(int s) throws InterruptedException {
    disp.setString("Cars: "+(N-s)+"   Spaces: "+s);
    ThreadPanel.rotate(348);
  }

  public void run() {
    try {
        Select sel = new Select();
        sel.add(depart);
        sel.add(arrive);
        while(true) {
          ThreadPanel.rotate(12);
          arrive.guard(spaces>0);
          depart.guard (spaces<N);
          switch (sel.choose()) {
          case 1:depart.receive();display(++spaces);
                 break;
          case 2:arrive.receive();display(--spaces);
                 break;
          }
        }
    } catch (InterruptedException e){}
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -