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

📄 singlelanebridge.java

📁 英国帝国理工学院电脑系多线程课程教学材料之十 ---- 单行道范例
💻 JAVA
字号:
package concurrency.bridge;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class SingleLaneBridge extends Applet {

    BridgeCanvas display;
    Button restart;
    Button freeze;
    Button onecar;
    Button twocar;
    Button threecar;
    Checkbox fair;
    Checkbox safe;
    boolean fixed = false;
    int maxCar = 1;

    Thread red[];
    Thread blue[];

    public void init() {
        setLayout(new BorderLayout());
        display = new BridgeCanvas(this);
        add("Center",display);
        restart = new Button("Restart");
        restart.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             display.thaw();
           }
        });
		
        freeze = new Button("Freeze");
        freeze.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             display.freeze();
           }
        });
		
        onecar = new Button("One Car");
        onecar.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             stop();
             maxCar = 1;
             start();        
           }
        });
		
        twocar = new Button("Two Cars");
        twocar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              stop();
              maxCar = 2;
              start();        
            }
         });
		
        threecar = new Button("Three Cars");
        threecar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              stop();
              maxCar = 3;
              start();        
            }
         });
		
        safe = new Checkbox("Safe",null,true);
		safe.setBackground(Color.lightGray);
		safe.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
              stop();
              start();        
            }
         });
	
        fair = new Checkbox("Fair",null,false);
		fair.setBackground(Color.lightGray);
        fair.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
              stop();
              start();        
            }
         });
		
        Panel p1 = new Panel();
        p1.setLayout(new FlowLayout());
        p1.add(freeze);
        p1.add(restart);
        p1.add(onecar);
        p1.add(twocar);
        p1.add(threecar);
        p1.add(safe);
        p1.add(fair);
        add("South",p1);
        setBackground(Color.lightGray);
   }


    public void start() {
        red = new Thread[maxCar];
        blue = new Thread[maxCar];
        display.init(maxCar);
        Bridge b;
        if (fair.getState() && safe.getState())
            b = new FairBridge();
        else if ( safe.getState())
            b = new SafeBridge();
        else
            b = new Bridge();
        for (int i = 0; i<maxCar; i++) {
            red[i] = new Thread(new RedCar(b,display,i));
            blue[i] = new Thread(new BlueCar(b,display,i));
        }
        for (int i = 0; i<maxCar; i++) {
            red[i].start();
            blue[i].start();
        }
    }

    public void stop() {
        for (int i = 0; i<maxCar; i++) {
            red[i].interrupt();
            blue[i].interrupt();
        }
    }

 }

⌨️ 快捷键说明

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