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

📄 frame.java

📁 java多线程银行家业务模拟实现 软件说明: 运行环境:windows
💻 JAVA
字号:
package bankserver;


import javax.swing.*;
import java.awt.Rectangle;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.util.Random;

public class frame extends JFrame
{

    int arr[]=new int[500];
    int num=0;
    String str="";
    int flag=0;
    int cnum=1;

    thread th1;
    thread th2;
    thread th3;
    thread th4;
    thread th5;
    thread th6;






    public frame()
    {
        try
        {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args)////////////主函数
    {
        frame frame = new frame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void jbInit() throws Exception {
        this.setSize(1020,500);
        this.setLocation(0,50);
        this.getContentPane().setLayout(null);
        jTextField1.setRequestFocusEnabled(false);
        jTextField1.setEditable(false);
        jTextField1.setBounds(new Rectangle(4, 129, 148, 23));
        jTextField1.addActionListener(new Frame_jTextField1_actionAdapter(this));
        jLabel1.setFont(new java.awt.Font("宋体", Font.BOLD, 18));
        jLabel1.setForeground(Color.blue);
        jLabel1.setText("银行服务厅");
        jLabel1.setBounds(new Rectangle(489, 20, 116, 25));
        jTextField5.setEditable(false);
        jTextField5.setBounds(new Rectangle(833, 126, 168, 25));
        jTextField4.setEditable(false);
        jTextField4.setBounds(new Rectangle(618, 127, 171, 25));
        jTextField3.setEditable(false);
        jTextField3.setBounds(new Rectangle(391, 129, 180, 25));
        jTextField2.setEditable(false);
        jTextField2.setBounds(new Rectangle(185, 128, 160, 26));
        jLabel4.setText("窗口三");
        jLabel4.setBounds(new Rectangle(463, 75, 42, 15));
        jLabel3.setText("窗口二");
        jLabel3.setBounds(new Rectangle(240, 72, 42, 15));
        jLabel2.setText("窗口一");
        jLabel2.setBounds(new Rectangle(49, 73, 42, 15));
        jTextField6.setEditable(false);
        jButton3.setBounds(new Rectangle(513, 325, 111, 23));
        jButton3.setText("新进顾客");
        jButton3.addActionListener(new Frame_jButton3_actionAdapter(this));
        jButton2.setBounds(new Rectangle(315, 324, 81, 23));
        jButton2.setText("下班");
        jButton2.addActionListener(new Frame_jButton2_actionAdapter(this));
        jButton1.setBounds(new Rectangle(127, 323, 81, 23));
        jButton1.setText("上班");
        jButton1.addActionListener(new Frame_jButton1_actionAdapter(this));
        jTextField6.setBounds(new Rectangle(130, 223, 870, 25));
        jTextField6.addActionListener(new frame_jTextField6_actionAdapter(this));
        jLabel7.setText("顾客时间片队列");
        jLabel7.setBounds(new Rectangle(18, 218, 112, 28));
        jLabel6.setText("窗口五");
        jLabel6.setBounds(new Rectangle(887, 64, 42, 15));
        jLabel5.setText("窗口四");
        jLabel5.setBounds(new Rectangle(663, 68, 42, 15));
        this.getContentPane().add(jButton1);
        this.getContentPane().add(jButton2);
        this.getContentPane().add(jButton3);
        this.getContentPane().add(jTextField6);
        this.getContentPane().add(jLabel7);
        this.getContentPane().add(jLabel1);
        this.getContentPane().add(jLabel3);
        this.getContentPane().add(jLabel2);
        this.getContentPane().add(jTextField1);
        this.getContentPane().add(jTextField3);
        this.getContentPane().add(jLabel4);
        this.getContentPane().add(jTextField2);
        this.getContentPane().add(jTextField4);
        this.getContentPane().add(jLabel5);
        this.getContentPane().add(jLabel6);
        this.getContentPane().add(jTextField5);
        jButton2.setVisible(false);
        jButton3.setVisible(false);

    }

    JLabel jLabel1 = new JLabel();
    JTextField jTextField1 = new JTextField();
    JTextField jTextField2 = new JTextField();
    JTextField jTextField3 = new JTextField();
    JTextField jTextField4 = new JTextField();
    JTextField jTextField5 = new JTextField();
    JLabel jLabel2 = new JLabel();
    JLabel jLabel3 = new JLabel();
    JLabel jLabel4 = new JLabel();
    JLabel jLabel5 = new JLabel();
    JLabel jLabel6 = new JLabel();
    JLabel jLabel7 = new JLabel();
    JTextField jTextField6 = new JTextField();
    JButton jButton1 = new JButton();
    JButton jButton2 = new JButton();
    JButton jButton3 = new JButton();
    public void jTextField1_actionPerformed(ActionEvent e) {

    }

    public void jButton1_actionPerformed(ActionEvent e) //////上班 启动线程
    {
        flag=0;
       jTextField1.setText("空闲");
       jTextField2.setText("空闲");
       jTextField3.setText("空闲");
       jTextField4.setText("空闲");
       jTextField5.setText("空闲");
       jButton1.setVisible(false);
       jButton2.setVisible(true);
       jButton3.setVisible(true);

        th1 = new thread();
        th2 = new thread();
        th3 = new thread();
        th4 = new thread();
        th5 = new thread();

        th1.setName("th1");
        th2.setName("th2");
        th3.setName("th3");
        th4.setName("th4");
        th5.setName("th5");


        th1.start();
        th2.start();
        th3.start();
        th4.start();
        th5.start();

        }


    public void jButton2_actionPerformed(ActionEvent e) ////////下班 停止线程
    {

      thread td=new thread();
      td.start();
      td.changeflag(2);


     th1.interrupt();
    th2.interrupt();
    th3.interrupt();
    th4.interrupt();
    th5.interrupt();
   // flag=-1;
    cnum=1;
   jTextField1.setText("已下班");
   jTextField2.setText("已下班");
   jTextField3.setText("已下班");
   jTextField4.setText("已下班");
   jTextField5.setText("已下班");
   jTextField6.setText("");
   jButton2.setVisible(false);
   jButton1.setVisible(true);
   jButton3.setVisible(false);
    }

    public void jButton3_actionPerformed(ActionEvent e)////////新顾客
    {

       th6=new thread();
       th6.setName("th6");
       th6.start();
      }

 class thread extends Thread//implements Runnable///************内部类线程类
   {
       JTextField jt = new JTextField();
       Object obj=new Object();
       int j=0;

       public synchronized void run()
       {

           String str1 = this.currentThread().getName();////////////获取当前线程的名字
           if (str1.equals("th6"))
            {
                j = 0;
                changeflag(0);
                System.out.println("flag=" + flag);
                Random autoRand = new Random();
                int random = autoRand.nextInt() % 11;
                while (random <= 0) {
                    random = autoRand.nextInt() % 11;
                }

                arr[num] = random;
                str = str + arr[num] + "|";

                System.out.println(str);
                num++;
                jTextField6.setText(str);
              }
              if (str1.equals("th1"))
           {

               jt = jTextField1;
               j=1;
           }
           if (str1.equals("th2"))
           {
               j=1;
               jt = jTextField2;

           }
           if (str1.equals("th3"))
           {
               j=1;
               jt = jTextField3;

           }
           if (str1.equals("th4"))
           {
               j=1;
               jt = jTextField4;

           }
           if (str1.equals("th5"))
           {
               j=1;
               jt = jTextField5;
           }
          if(j==1)
          {
              while (true)//////////******************线程服务区**************
           {
              synchronized(obj)
             {

                 if(flag==-1) break;
                 if (flag <= 0)
                   {
                       try
                       {
                           this.sleep(1000);

                           System.out.println("sleep");

                           jt.setText("空闲..");
                       }
                       catch (Exception ex)
                       {

                       }

                   }
                   else
                   {
                       try
                      {


                      int t=Integer.parseInt(str.substring(0,str.indexOf("|")));
                     str=str.substring( str.indexOf("|")+1,str.length());
                     jTextField6.setText(str);
                     jt.setText("为顾客"+cnum + "服务 时间:"+t);
                      cnum++;
                     changeflag(1);
                     System.out.println("时间:"+t);
                      sleep(t*1000);////////////////////服务期线程睡眠
                      }
                      catch (Exception ex) {}
                  }
              }
          }
      }

  }

       public synchronized void changeflag(int i)//////////修改公共变量flag
       {

           if(i==0)
           {
               flag++;
           }
           if(i==1)
          {

              flag--;
          }
          if(i==2)
         {

             flag=-1;
             str="";
         }
     }
   }

 public void jTextField6_actionPerformed(ActionEvent e) {

    }
}

class frame_jTextField6_actionAdapter implements ActionListener {
    private frame adaptee;
    frame_jTextField6_actionAdapter(frame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jTextField6_actionPerformed(e);
    }
}

class Frame_jButton3_actionAdapter implements ActionListener {
    private frame adaptee;
    Frame_jButton3_actionAdapter(frame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton3_actionPerformed(e);
    }
}
class Frame_jButton2_actionAdapter implements ActionListener {
    private frame adaptee;
    Frame_jButton2_actionAdapter(frame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton2_actionPerformed(e);
    }
}


class Frame_jButton1_actionAdapter implements ActionListener {
    private frame adaptee;
    Frame_jButton1_actionAdapter(frame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}
class Frame_jTextField1_actionAdapter implements ActionListener {
    private frame adaptee;
    Frame_jTextField1_actionAdapter(frame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jTextField1_actionPerformed(e);
    }
}






⌨️ 快捷键说明

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