met*_*fox 20 java multithreading
也许这个问题之前已被多次询问过,但我从未找到过令人满意的答案.
我必须使用循环策略来模拟进程调度程序.我正在使用线程来模拟进程和多道程序设计; 一切正常,JVM管理线程.但问题是,现在我想控制所有线程,这样我就可以通过一定量(或时间)单独运行每个线程,就像真正的OS进程调度程序一样.
我希望有一个所有线程的列表,因为我迭代列表我想为每个线程执行相应的量程,但是一旦时间到了,我想无限期地暂停该线程,直到列表中的所有线程都被执行,然后我到达同一个线程再次恢复它,依此类推.
那么他们是一种方法,不使用弃用的方法stop(),suspend()或resume()来控制线程吗?
谁说Java不够低?
这是我的3分钟解决方案.我希望它符合您的需求.
import java.util.ArrayList;
import java.util.List;
public class ThreadScheduler {
private List<RoundRobinProcess> threadList
= new ArrayList<RoundRobinProcess>();
public ThreadScheduler(){
for (int i = 0 ; i < 100 ; i++){
threadList.add(new RoundRobinProcess());
new Thread(threadList.get(i)).start();
}
}
private class RoundRobinProcess implements Runnable{
private final Object lock = new Object();
private volatile boolean suspend = false , stopped = false;
@Override
public void run() {
while(!stopped){
while (!suspend){
// do work
}
synchronized (lock){
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
}
}
public void suspend(){
suspend = true;
}
public void stop(){
suspend = true;stopped = true;
synchronized (lock){
lock.notifyAll();
}
}
public void resume(){
suspend = false;
synchronized (lock){
lock.notifyAll();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,"工作"不应该阻止.