我是在一个棘手的情况。我知道这几乎是我现在可以得到的,但我想要做的是实际上创建一个线程(或多个线程)的数组,并容纳队列中线程的数量,例如,我可以容纳一次3个线程,我让第一个3线程运行,然后让其他等待,当有空闲时,例如1是空闲的或终止,另一个可以开始运行。在线队列中等待的主题,Java
另外我想确保线程是否可以运行,如果正在运行的线程与其他线程的性别相同。
Thread myThreads[] = new Thread[LN.GetLine().length()];
int l=LN.GetLine().length();
for (int j = 0; j < LN.GetLine().length(); j++) {
String Name = CR.Gender(LN.GetLine().charAt(j)) + j;
myThreads[j] = new Thread(new MyThread(Name,LN));
myThreads[j].setPriority(l);
System.out.println(myThreads[j].toString());
l--;
}
for(int b=0;b<LN.GetLine().length();b++){
myThreads[b].start();
synchronized(myThreads[b]){
try{
myThreads[b].wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
现在,我可以容纳或使1线程运行在一次。
(是的,这是一个机器浴室的问题)
我真正的问题是。如果我编辑功能run()
myThread()
有wait()
或只是简单地把System.out.println(getName() + " is Using");
该线程将如何知道他们的run()
函数,其他线程正在运行。
public class MyThread extends Thread {
public MyThread(String id) {
super(id);
}
public void run(){
System.out.println(getName() + " is Using");
>>>Put wait if other thread running<<<<
>>>If can use or not if same gender<<<<
}
或者我应该只是实现外部?或把等待外面? 另外我在线程中真的很新,所以我还没有真正探索睡眠和中断。
在一个线程上调用'wait()'是不寻常的,在这种情况下,它没有任何作用。 – Titus
是的,我知道这次我试过了...无论如何我不能杀死/停止一个线程,因为那意味着他们不能使用,也许如果我可以让所有线程等待,并保持等待。直到我恢复他们,如果他们能够使用。 – HerlDerp
考虑使用固定线程池ExecutorService(在您的情况下,池大小将为3)。这种技术不需要创建等待的线程(浪费资源)。 ref:https://docs.oracle.com/javase/7/docs/api/index.html?java/util/concurrent/ExecutorService.html – mangotang