Diskuze: Prosím o radu.
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
odpověď
Ano dá se to realizovat a je to dost časté využití multithreadingu. Každá
instance bude obsahovat své vlastní vlákno, které bude vykonávat časovač.
Ten si můžeš klidně v každé instanci nastavit dejme tomu na nějaký
základ (třeba 1000 milisekund) + random integer (třeba random od 0 - 1000
dalších milisekund) a máš v každé instanci jiný delay. No a vůbec
nepotřebuješ nějakou globální časomíru - jen zesynchronizuješ ta vlákna
a půjdou ti hezky postupně. V nějakém for-each cyklu budeš tahat ty
instance z nějaké kolekce a u každé spustíš metodu start()
poznámka
ale místo věty:
Po sem snadné.
bys mohl postnout své řešení, které se jen doplní o stávající
problém. Jako sorry, ale uznej sám, že nemůžeme plnit domácí úkoly
všech škol od A do Z. Tu a tam se najde aktivista, ale takový způsob je na
po čuni - ukaž snahu a máš tu tucet zájemců o pomoc;)
Hoď sem co máš a dokončíme to nějak;)
hmm tak zkusím teda zaimprovizovat -> myslels něco takovéhoto?
import java.util.ArrayList;
import java.util.Random;
public class InstancesCreator {
//###################-ATRIBUTES-##################
//=========CONSTANT ATRIBUTES CLASSES==========
//=========VARIABLES ATRIBUTES CLASSES=========
//=========CONSTANT ATRIBUTES INSTANCE=========
private final ArrayList<Instance> collectionContainedInstances = new ArrayList<>();
private final Random rnd = new Random();
//========VARIABLES ATRIBUTES INSTANCE=========
private Instance instance;
//####################-STATIC-####################
//=============STATIC CONSTRUKTOR==============
//============STATIC ACCES METHODS=============
//===============STATIC METHODS================
//=================MAIN METHOD=================
public static void main(String[] args) {
new InstancesCreator();
}
//###################-INSTANCE-###################
//=================CONSTRUCTOR=================
public InstancesCreator() {
createInstances(1000000);
startIt();
}
//================ACCES METHODS================
//===================METHODS====================
public void createInstances(int countOfInstances) {
int i = 0;
while (i < countOfInstances) {
instance = new Instance();
instance.setName(String.valueOf(i));
collectionContainedInstances.add(instance);
i++;
}
}
public void startIt() {
collectionContainedInstances.stream().forEach((i) -> {
i.start();
i.join();
});
}
//###############-PRIVATE METHODS-################
//=====PRIVATE STATIC AND SUPPORT METHODS======
//=========PRIVATE AND SUPPORT METHODS=========
//#############-PRIVATE CONSTRUCORS-##############
//===============PRIVATE CLASSES===============
private class Instance implements Runnable {
private String name;
private Thread thread;
private int delayTime = 5;
@Override
public void run() {
try {
delayTime += rnd.nextInt(5);
System.out.println(String.format("############# Instance %s #############\nstarted!", getName()));
Thread.sleep(delayTime);
System.out.println(String.format("finished after %s time delay\n", delayTime));
} catch (InterruptedException exp) {
}
}
public void start() {
if (thread == null || !thread.isAlive()) {
thread = new Thread(this);
thread.start();
}
}
public void setName(String instancesName) {
name = instancesName;
}
public String getName() {
return name;
}
public void join() {
try {
thread.join();
} catch (InterruptedException ex) {
}
}
}
//===============TESTING METHODS===============
}
Počítej ale s tím, že když tam dáš jako já aspoň těch 5 milisekund delay u každého, tak ti to bude trvat cca 1 a půl hodiny, než to může nejdřív zkončit;)
Zobrazeno 3 zpráv z 3.