我正在尝试使用Java中的Threads实现Round Robin并面临这个问题。 当我运行这个程序时,它会询问我运行进程的进程ID和时间量,但在我指定之后它只显示一条消息BUILD SUCCESSFUL并且不显示循环Robin进程抢占。但是,如果我使用cmd并执行相同的代码它工作正常请帮助.... ???
package thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class job implements Runnable {
int process_id,no_of_instr,time_quantum;
Thread t;
public job(int pid,int instr,int tq) {
process_id=pid;
no_of_instr=instr;
time_quantum=tq;
t=new Thread(this);
t.start();
}
public void run() {
try {
System.out.println("Process Id " + process_id);
for(int i=0;i<no_of_instr;i++) {
System.out.println("Executing Instruction no " + i + " for Process id " + process_id);
Thread.sleep(time_quantum);
}
System.out.println("Job " + process_id + " is over");
}catch(Exception e) {
System.out.println("Exception" + e);
} // end of catch
} // end of run
}
public class Thread {
static void sleep(int time_quantum) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
Thread(job aThis) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
void start() {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public static void main(String[] args) {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter Process Id");
int process_id=Integer.parseInt(br.readLine());
System.out.println("Enter Time Quantum (In milliseconds)");
int time_quantum=Integer.parseInt(br.readLine());
job j1=new job(++process_id,24,time_quantum);
job j2=new job(++process_id,3,time_quantum);
job j3=new job(++process_id,3,time_quantum);
}catch(IOException | NumberFormatException e) {
System.out.println("Can't create because of Exception" + e);
}
}
}
答案 0 :(得分:0)
我认为你对Java线程如何工作有错误的想法。
Java中的标准线程行为由名为java.lang.Thread
的标准类实现。此类和关联的JVM基础结构将导致您的代码在不同的核心上运行。
您所做的就是创建一个名为thread.Thread
的自己的类,它有一些方法签名,看起来像标准Thread
API中的一些方法。但是你似乎用空体实现了那些方法。所以,当然,当你的main()
方法调用它们时,它们什么都不做。
这是完全错误的做法。你不应该写自己的thread.Thread
课程。你应该使用java.lang.Thread
1 。
我建议您从头开始阅读Oracle Java Tutorial Concurrency lesson。
1 - 实际上,不可能做java.lang.Thread
类在纯Java中所做的事情......除非你去用Java实现自己的JVM。 < / p>