?? spoolingtest.java
字號:
import javax.swing.*;
import java.math.*;
public class SpoolingTest{
private static Output output1 , output2;
private static Spooling spo;
private static List list = new List();//存儲井
private static List wait = new List();//等待隊列
private static String[] file1 = new String[50];//輸出進程一的文件
private static String s ="";
private static String[] file2 = new String[50];//輸出進程二的文件
private static int num1 , num2;//輸出進程的文件數
private String input1 , input2;
public SpoolingTest()
{
output1 = new Output( "輸出進程1" );
output2 = new Output( "輸出進程2" );
spo = new Spooling( "Spooling進程" );
input1 = JOptionPane.showInputDialog( "Input the times of user1's output file");
input2 = JOptionPane.showInputDialog( "Input the times of user1's output file");
num1 = Integer.parseInt( input1 );
num2 = Integer.parseInt( input2 );
}
public static boolean input( String s ) //將s插入存儲井中,成功插入返回true,存儲井滿返回false.
{
if( list.getSize() <= 10 ) //存儲井可放10個文件
{
list.insertAtBack( s );
return true;
}
else
return false;
}
public void run()
{
int i = 0;//輸出進程一的文件計數器
int j = 0;//輸出進程二的文件計數器
String first;//記錄等待隊列的第一個文件
System.out.println( "程序啟動:" );
System.out.println( "\n" );
while( !(list.getSize() ==0 && i == num1 && j == num2) )
// 當存儲井為空,計數器i,j分別等于輸出進程一二的文件數,結束運行
{
double choose = Math.random(); //隨機決定要運行進程
if( choose <= 0.45 )//運行輸出進程一
{
if( i == num1 )
continue;
output1.setStatus( 1 );
spo.setStatus( 0 );
output2.setStatus( 0 );
System.out.println( output1.getName() + "運行. " + output2.getName() + "," + spo.getName() + "等待.");
System.out.println( "\n");
file1[i] = output1.produce();//產生輸出進程一的一個文件
if( input( file1[i] ) ) //判斷能否插入存儲井
{
System.out.println("生成" + file1[i]+"放入存儲井中.");
System.out.println( "\n");
}
else
{
wait.insertAtBack( file1[i] ); //存儲井滿,將該文件插入等待隊列
System.out.println( "存儲井滿," + output1.getName() + "把第"+i+"個"+file1[i]+"插入等待隊列.");
System.out.println( "\n");
output1.setStatus(0);
}
i++;//文件數計數器加一
}
if( choose > 0.45 && choose <= 0.9 )//運行輸出進程二
{
if( j == num2 )
continue;
output2.setStatus( 1 );
spo.setStatus( 0 );
output1.setStatus( 0 );
System.out.println( output2.getName() + "運行. " + output1.getName() + "," + spo.getName() + "等待.");
System.out.println( "\n");
file2[j] = output2.produce();//產生輸出進程一的一個文件
if( input( file2[j] ) ) //判斷能否插入存儲井
{
System.out.println("生成" + file2[j] + "放入存儲井中.");
System.out.println( "\n");
}
else
{
wait.insertAtBack( file2[j] );//將該文件插入等待隊列
System.out.println( "存儲井滿," + output2.getName() + "把第"+j+"個"+file2[j]+"插入等待隊列.");
System.out.println( "\n");
output2.setStatus(0);
}
j++;//文件數計數器加一
}
if( choose > 0.9 )//運行Spooling進程
{
System.out.println( "Spooling進程運行." );
System.out.println( "" );
output2.setStatus( 0 );
output1.setStatus( 0 );
if( list.getSize() == 0 )
{
System.out.println("存儲井為空!");
System.out.println( "\n");
spo.setStatus( -1 );//當存儲井為空時,狀態為-1
continue;
}
else
{
System.out.println( "向I/O設備輸出" + list.removeFromFront() );
System.out.println( "\n" );
if( !( wait.isEmpty() ) )//判斷是等待隊列中是否有要插入存儲井的文件
{
first = wait.removeFromFront();
System.out.println( "將等待隊列中的第一個" + first + "放入存儲井" );
list.insertAtBack( first );
}
else
System.out.println( "沒有等待進入存儲井的的文件!" );
System.out.println( "\n" );
}
}
}
System.out.println( "運行結束!!!" );
}
public static void main( String args[] )
{
SpoolingTest app = new SpoolingTest();
app.run();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -