Diskuze: GPIO pin listener - vlákna
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.
Tohle do tridy, kde mas definovany ten pinButton
private static final AtomicLong lastActivation = new AtomicLong(System.currentTimeMillis()); //atomic long neni nutny, jen sem liny psat novou tridu s jednim atributem typu volatile long a getterem / setterem, na jejiz instanci bych to mohl zamknout
private static final long nextActivationStep = 1000 * 5; // 5 sekund
Tohle dovnitr metody, ktera se vola pri aktivaci listeneru. A jestli to mas do skoly tak si precti a pripadne uprav komentare
long previousActivation = lastActivation.get();
long currentTime = System.currentTimeMillis();
if (previousActivation + nextActivationStep < currentTime) {
synchronized (lastActivation) { //k uzamknuti dojde az ve chvili kdy je predchozi podminka splnena
previousActivation = lastActivation.get();
currentTime = System.currentTimeMillis();
// uvnitr synchronized bloku je nutne overit podminku znovu, protoze se teoreticky mohla potkat dve vlakna a druhe vlakno
// by vstoupilo do synchronized bloku pote co cekalo nez jine vlakno synchronized blok opusti
if (previousActivation + nextActivationStep < currentTime) {
lastActivation.set(currentTime);
// funkcni kod listeneru prijde sem
}
}
}
Díky, něco na tenhle způsob mě napadlo, jen jsem si říkal, že by to asi mohlo jít i jinak, nějakou standardní cestou. Tak jsem se asi pletl.
Zobrazeno 3 zpráv z 3.