Я в липкой ситуации. Я знаю, что это почти так, как я могу получить сейчас, но то, что я хочу сделать, это на самом деле создать массив потоков (или многих потоков) и разместить количество потоков в очереди в строке, так что, например, я могу разместить 3 потока за раз, я делаю первые три потока, а затем заставляю остальных ждать, когда есть свободные, например, 1 свободный или завершенный, другой может начать работать.Threads Waiting in Line Queue, 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 поток за один раз.
(Да это машина ванной проблема)
Мой реальный вопрос. if i Отредактируйте функцию 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<<<<
}
Или я должен просто реализовать это снаружи? или поставить Ожидание снаружи? Также я действительно новичок в Threading, поэтому я еще не изучил спящий режим и прерывание.
Вызов 'wait()' в потоке необычен, и в этом случае он не имеет никакого эффекта. – Titus
Да, я знаю, что к этому времени я попробовал ... Во всяком случае, я не могу убить/остановить поток, потому что это будет означать, что они не могут использовать, может быть, если я смогу заставить весь поток ждать и оставаться ждать. пока я не возобновит их, если они смогут использовать. – HerlDerp
Рассмотрите возможность использования пула фиксированных потоков ExecutorService (в вашем случае размер пула будет 3). Этот метод не потребует создания потоков, которые ждут (расточительство ресурсов). ref: https://docs.oracle.com/javase/7/docs/api/index.html?java/util/concurrent/ExecutorService.html – mangotang