我有一个任务,需要模拟打印机的行为,其中打印作业可以以不同的时间间隔或同时提交到打印机。因此,这里必须使用
总共只需要编写3个类:
以下是我的代码:
thread.start()
,打印机将从打印机队列中取出作业并打印,而其它作业则等待它们的轮到。总共只需要编写3个类:
Admin
类、PrintRequest
类和Printer
类。以下是我的代码:
public class Admin{
public static void main(String[] args){
Printer printer = new Printer();
for(int x=0; x<10;x++){
PrintRequest printRequest = new PrintRequest(x,printer);
printRequest.start();
}
}
}
public class PrintRequest extends Thread {
private static int duration;
private static int id;
private static Printer printer;
public PrintRequest(int id, Printer printer){
duration = (int)Math.ceil(Math.random()*1000);
this.id = id;
this.printer = printer;
}
public void run(){
printer.printJob(id, duration);
}
}
public class Printer{
public static synchronized void printJob(int id, int duration){
System.out.println("Printing " + id);
try{Thread.sleep(duration);}
catch(InterruptedException ex){System.out.println(ex.getMessage());}
System.out.println("Completed printing " + id);
}
}
输出结果存在一些问题,它并不是我想要的从ID 0-10打印的结果。相反,输出结果如下图所示:
那么我的代码有什么问题呢?我认为问题出在Admin
类循环上,但我应该如何改进代码,使其正常工作呢?
打印机
的概念与运行它的线程分开。我会定义一个Printer
类,其构造函数需要一个PrintQueue
参数和一个run()
方法。我的Printer
不知道任何关于线程的信息。然后,我会编写一个更高级的“粘合”例程,用于创建PrintQueue
实例、创建一个将为其服务的Printer
、创建一个运行Printer
的Thread
,并将它们全部连接起来。” - Solomon Slow