📄 ps.java
字号:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Vector;
import java.util.EventObject;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
public class ps
{
Vector<Vector> data = new Vector<Vector>();
Vector c = new Vector();
Thread ts;
boolean flag3;
boolean flag4;
boolean flag5;
boolean flag6;
// 调度的进程
Vector<LinkedList> list = new Vector<LinkedList>();
Vector<Integer> pns = new Vector<Integer>();
Vector<Integer> priorities = new Vector<Integer>();
Vector<Integer> lives = new Vector<Integer>();
Vector<String> status = new Vector<String>();
LinkedList<Vector> order = new LinkedList<Vector>();
HashSet<Integer> hs = new HashSet<Integer>();
DefaultTableModel tm;
private JFrame frame;
JTable table;
public static void main(String args[])
{
try
{
ps window = new ps();
window.frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
class schedule implements Runnable
{
schedule()
{
}
public void run()
{
sort();
while (true)
{
try
{
if (flag5 == true&&flag6 == true)
{
build();
sort();
flag5 = false;
flag6 = false;
flag4 = true;
}
if (flag3 == false)break;
execute();
}
catch (Exception e){}
}
}
}
//**************************************************************************************************************************
private void execute() throws InterruptedException
{
Vector t = data.get(0);
Integer i = (Integer)(t.get(2));
if ( i.intValue() > 1)
{
t.set(3,"RUNIN");
t.set(2,i.intValue()-1);
java.lang.Thread.sleep((long)400);
}
else
{
java.lang.Thread.sleep((long)400);
t.set(2,i.intValue()-1);
Integer i2 = (Integer)(t.get(1));
Integer i3 = (Integer)(t.get(0));
hs.remove(i3.intValue());
data.remove(0);
(list.get(i2.intValue())).poll();
}
flag6 = true;
table.updateUI();
if (data.size() == 0)
{
flag3 = false;
}
}
//**************************************************************************************************************************
private void sort()
{
int n = data.size();
Vector runnin = data.get(0);
runnin.set(3,"READY");
int[] o = new int[n];
int count = 0;
int temp;
LinkedList l = new LinkedList();
for (int i = 49 ;i >= 0 ;i-- )
{
l = list.get(i);
for (int j = 0 ;j < l.size() ;j++ )
{
o[count] = (Integer)(l.get(j));
count++;
}
}
int now;
Integer iTemp = new Integer(0);
for (int i = 0 ;i < n ;i++ )
{
now = o[i];
for (int j = 0;j < data.size() ;j++ )
{
iTemp = (Integer)(data.get(j).get(0));
if (iTemp.intValue() == now)now = j;
}
order.offer(data.get(now));
data.remove(now);
}
for (int i = 0 ;i < n ;i++ )
{
data.add(order.poll());
}
}
//**************************************************************************************************************************
private void build()
{
buildor(1);
int n = pns.size();
Vector temp = new Vector();
temp.add(pns.get(n-1));
temp.add(priorities.get(n-1));
temp.add(lives.get(n-1));
temp.add(status.get(n-1));
data.add(temp);
}
//**************************************************************************************************************************
public ps()
{
initialize();
}
private void initialize()
{
c.add("PID");
c.add("PRIORITY");
c.add("LIFE");
c.add("STATUS");
tm = new DefaultTableModel(data,c);
frame = new JFrame();
frame.setTitle("ProcessSchedule");
frame.getContentPane().setLayout(null);
frame.setBounds(100, 100, 500, 375);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(46, 90, 399, 173);
frame.getContentPane().add(scrollPane);
table = new JTable();
table.setVerifyInputWhenFocusTarget(false);
table.setEditingColumn(-1);
table.setEditingRow(-1);
table.setFocusable(false);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setRequestFocusEnabled(false);
table.setBorder(new BevelBorder(BevelBorder.LOWERED));
table.setModel(tm);
scrollPane.setViewportView(table);
final JTextField pNum = new JTextField();
pNum.setBounds(132, 53, 95, 20);
pNum.setText("8");
frame.getContentPane().add(pNum);
final JButton start = new JButton();
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (flag3)show();
else
{
initial(pNum, start);
ts = new Thread(new schedule());
ts.start();
}
}
});
start.setText("START");
start.setBounds(46, 289, 99, 23);
frame.getContentPane().add(start);
final JButton insert = new JButton();
insert.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (flag4 == true)
{
flag4 = false;
flag5 = true;
}
else show();
}
});
insert.setText("NEW PROCESS");
insert.setBounds(244, 289, 99, 23);
frame.getContentPane().add(insert);
final JLabel label = new JLabel();
label.setText("开始的进程数");
label.setBounds(46, 55, 80, 15);
frame.getContentPane().add(label);
}
private void show()
{
String message = "Slower Please!";
JOptionPane.showMessageDialog(frame, message);
}
//**************************************************************************************************************************
private void initial(JTextField pNum, JButton start)
{
hs.clear();
pns.clear();
priorities.clear();
lives.clear();
status.clear();
flag3 = true;
flag4 = true;
flag5 = false;
flag6 = false;
list.clear();
int pn = Integer.parseInt(pNum.getText());
for (int i = 0 ; i < 50 ; i++)
{
LinkedList<Integer> p = new LinkedList<Integer>();
list.add(p);
}
buildor(pn);
for (int i = 0 ;i < pn ;i++ )
{
Vector temp = new Vector();
temp.add(pns.get(i));
temp.add(priorities.get(i));
temp.add(lives.get(i));
temp.add(status.get(i));
data.add(temp);
}
table.updateUI();
}
//**************************************************************************************************************************
private void buildor(int pn)
{
boolean flag = true;
int temp = 0;
java.util.Random r=new java.util.Random();
for (int i = 0 ; i < pn ; i++)
{
while (flag)
{
temp =(r.nextInt() >>> 1) % 99 +1;
if (hs.contains(temp))continue;
pns.add(temp);
hs.add(temp);
break;
}
priorities.add( (r.nextInt() >>> 1) % 49);
lives.add( (r.nextInt() >>> 1) % 4+1);
status.add("READY");
flag = true;
}
int t = 0;
int t2 = 0;
if (pn == 1)
{
t = priorities.get(priorities.size()-1);
(list.get(t)).offer(pns.get(priorities.size()-1));
}
else
{
for (int i = 0 ; i < pn ; i++)
{
t = priorities.get(i);
list.get(t).offer(pns.get(i));
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -