/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package subscriber; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Flow.Subscriber; import java.util.concurrent.SubmissionPublisher; public class Datenmodell implements Runnable { //Möglichkeit 1 bei Stopp keine Updates mehr an Anzeige private int wert; private volatile boolean laufend; private SubmissionPublisher iPublisher; private SubmissionPublisher bPublisher; private ExecutorService eService; private boolean darfupdaten =true; public Datenmodell() { wert = 1; laufend = false; iPublisher = new SubmissionPublisher<>(); bPublisher = new SubmissionPublisher<>(); eService = Executors.newSingleThreadExecutor(); } public void start() { laufend = true; darfupdaten = true; eService.submit(this); } public void stop() { laufend = false; darfupdaten =false; } public void addWertSubscription(Subscriber subscriber) { iPublisher.subscribe(subscriber); } public void addZustandSubscription(Subscriber subscriber) { bPublisher.subscribe(subscriber); } @Override public void run() { while (laufend) { try { Thread.sleep(50); } catch (Exception e) { System.err.println(e); } if(wert==6){ wert=0; } wert++; if(darfupdaten){ iPublisher.submit(wert); } } } // Möglichkeit 2 zerstören und neuerstellen des Thread-Objektes // private int wert; // private volatile boolean laufend; // private SubmissionPublisher iPublisher; // private SubmissionPublisher bPublisher; // private ExecutorService eService; // // public Datenmodell() // { // wert = 1; // laufend = false; // iPublisher = new SubmissionPublisher<>(); // bPublisher = new SubmissionPublisher<>(); // // } // // public void start() // { // laufend = true; // eService = Executors.newSingleThreadExecutor(); // eService.submit(this); // } // // public void stop() // { // laufend = false; // eService = null; // } // // public void addWertSubscription(Subscriber subscriber) // { // iPublisher.subscribe(subscriber); // } // // public void addZustandSubscription(Subscriber subscriber) // { // bPublisher.subscribe(subscriber); // } // // @Override // public void run() // { // while (laufend) // { // try // { // Thread.sleep(50); // } // catch (Exception e) // { // System.err.println(e); // } // if(wert==6){ // wert=0; // } // wert++; // iPublisher.submit(wert); // // // } // } //Ende Möglichkeit 2 // Möglichkeit 3 wait und notify // private int wert; // private volatile boolean await; // private SubmissionPublisher iPublisher; // private SubmissionPublisher bPublisher; // private ExecutorService eService; // // public Datenmodell() // { // wert = 1; // await = false; // iPublisher = new SubmissionPublisher<>(); // bPublisher = new SubmissionPublisher<>(); // eService = Executors.newSingleThreadExecutor(); // } // // public synchronized void start() // { // if(await){ // eService.notify(); // } // eService.submit(this); // } // // public synchronized void stop() // { // try{ // eService.wait(); // // await = true; // }catch(Exception ex){ // System.out.println(ex); // } // } // // public void addWertSubscription(Subscriber subscriber) // { // iPublisher.subscribe(subscriber); // } // // public void addZustandSubscription(Subscriber subscriber) // { // bPublisher.subscribe(subscriber); // } // // @Override // public void run() // { // while(true){ // try // { // Thread.sleep(50); // } // catch (Exception e) // { // System.err.println(e); // } // if(wert==6){ // wert=0; // } // wert++; // iPublisher.submit(wert); // // } // } }