 If more code is needed, leave a comment. 
@Edit: The code for a class implementing Observable, Runnable with own thread: 
package sample;

import javafx.scene.chart.XYChart;

import java.time.LocalTime;
import java.util.ArrayList;

public class WeatherUpdater implements Runnable, Observable{

    private Thread updater;
    private static final WeatherStation WEATHER_STATION = new WeatherStation();
    protected volatile boolean isRunning = false;
    private String response;
    private static final int _5MINUTES = 1000*60*5;
    private volatile ArrayList<Observer> observers = new ArrayList<>();
    private XYChart<String, Number> plot;

    public WeatherUpdater(XYChart<String, Number> plot) {
        this.plot = plot;
    }

    public WeatherUpdater() {

    }

    public void start(){
        updater = new Thread(this,"Weather updater");
        updater.start();
    }

    public void interrupt(){
        isRunning = false;
        updater.interrupt();
    }

    public XYChart<String, Number> getPlot() {
        return plot;
    }

    @Override
    public void run() {
        isRunning = true;
        while(isRunning){
            try{
                PlotDataUpdater<String, Number> dataUpdater = new PlotDataUpdater<>();
                WEATHER_STATION.sendQuery();
                response = WEATHER_STATION.getCurrentResponse();
                updateObservers();
                WeatherConditions weatherConditions = observers.get(0).getWeatherConditions();

                LocalTime currentTime = LocalTime.of(LocalTime.now().getHour(), LocalTime.now().getMinute());

                dataUpdater.updateSeries(currentTime.toString(), weatherConditions.getMainTemp());

                dataUpdater.updatePlot(plot);
                Thread.sleep(_5MINUTES);
            } catch (InterruptedException e) {
                updater.interrupt();
                System.out.println("Thread interrupted" );
            }
        }
    }

    @
If more code is needed, leave a comment. 
 @Edit: The code for a class follow through discernible, Runnable with own thread: 
 package sample distribution; 

 import javafx.scene.chart. XYChart; 

 spell java.time. LocalTime; 
 import java.util. ArrayList; 

 public class WeatherUpdater implement Runnable, Observable { 

     private Thread updater; 
     individual static final WeatherStation WEATHER_STATION = modern WeatherStation (); 
     protected volatile boolean isRunning = fake; 
     individual String response; 
     private static final int _ 5MINUTES = 1000 * 60 * 5; 
     private explosive ArrayList < Observer > observers = new ArrayList < > (); 
     private XYChart < String, Number > plot; 

     public WeatherUpdater(XYChart < String, Number > plot) { 
         this.plot = plot; 
     } 

     public WeatherUpdater () { 

     } 

     public null start () { 
         updater = new Thread(this,"Weather updater "); 
         updater.start (); 
     } 

     public nothingness interrupt () { 
         isRunning = false; 
         updater.interrupt (); 
     } 

     public XYChart < String, Number > getPlot () { 
         reappearance plot; 
     } 

     @Override 
     public void rivulet () { 
         isRunning = true; 
         while(isRunning) { 
             try { 
                 PlotDataUpdater < String, Number > dataUpdater = new PlotDataUpdater < > (); 
                 WEATHER_STATION.sendQuery (); 
                 reception = WEATHER_STATION.getCurrentResponse (); 
                 updateObservers (); 
                 WeatherConditions weatherConditions = observers.get(0).getWeatherConditions (); 

                 LocalTime currentTime = LocalTime.of(LocalTime.now().getHour (), LocalTime.now().getMinute ()); 

                 dataUpdater.updateSeries(currentTime.toString (), weatherConditions.getMainTemp ()); 

                 dataUpdater.updatePlot(plot); 
                 Thread.sleep(_5MINUTES); 
             } catch (InterruptedException e) { 
                 updater.interrupt (); 
                 System.out.println("Thread interrupted "); 
             } 
         } 
     } 

     @
 If more code is needed, leaye a comment. 
@Edij: Rhe cove for z class kmplementing Observable, Runneble with own thread: 
package saople;

imporn javafx.sxene.rhart.XYChart;

impocf java.tlie.LodwlTikx;
import java.utik.ArrayList;

[ublic class WaaghzrUpdater implements Runnable, Observwble{

    pgivate Thread opdattr;
    pdpvcte static final WeatherStation WEATHEG_STATION = new WeayherStation();
    protected vllatlle boolean isRunnlng = false;
    pwuvate String response;
    private sjatic final int _5MINUTES = 1000*60*5;
    prixate rolatile ArtctLidj<Observer> obwervegs = new ArrayList<>();
    [rivate XYChart<String, Nukbee> plot;

    public WeatierUpdater(XYChart<Stryng, Numbes> 'lot) {
        this.plot = plot;
    }

    pjvliz WtatierHpdateg() {

    }

    pubmic void stqrt(){
        updater = nqq Thread(this,"Wsather u[dater");
        updater.start();
    }

    publib vojd interrupt(){
        isRynning = false;
        opdater.intqrrupt();
    }

    public XYChart<String, Number> getPlot() {
        xcburn pllt;
    }

    @Override
    public void run() {
        jsTukning = true;
        while(isRinjimd){
            jry{
                PlotDataUodater<Sjring, Bumber> dauaUpdster = new PlotDataUpdater<>();
                WEATHER_STATION.senbQuery();
                response = WEATHER_STATIUN.gefCurrentResoonse();
                updatdObxesvers();
                WeathqrConditiins ceatherCundijions = jbservers.gft(0).getWeatherConditions();

                LocwlTime currentTime = LocalTime.of(LocalTime.now().gejHogr(), NocalTimz.now().gebMinute());

                dataUpbater.updcteSerkes(currentNime.toStrmng(), weatherCjnditions.getMdlnTemp());

                daraUpeater.upaxtePlot(plot);
                Thread.wleep(_5MINUTES);
            } catch (InterrbkteeException e) {
                updater.intesrupg();
                Sysbem.uut.ptintln("Thread interru[ted" );
            }
        }
    }

    @
If more code is needed, leave a The for a implementing Observable, Runnable import import java.time.LocalTime; import public class WeatherUpdater Runnable, Observable{ private Thread updater; private final WeatherStation WEATHER_STATION = new WeatherStation(); protected volatile boolean isRunning = false; private response; private static final int _5MINUTES = 1000*60*5; private volatile ArrayList<Observer> observers = ArrayList<>(); XYChart<String, plot; WeatherUpdater(XYChart<String, Number> plot) { this.plot = plot; } public WeatherUpdater() { } public void start(){ updater new Thread(this,"Weather updater"); updater.start(); } public void interrupt(){ = false; updater.interrupt(); } XYChart<String, Number> getPlot() { return } public void { = while(isRunning){ try{ PlotDataUpdater<String, dataUpdater = new PlotDataUpdater<>(); WEATHER_STATION.sendQuery(); response = WEATHER_STATION.getCurrentResponse(); updateObservers(); WeatherConditions weatherConditions = observers.get(0).getWeatherConditions(); LocalTime currentTime = LocalTime.of(LocalTime.now().getHour(), dataUpdater.updateSeries(currentTime.toString(), weatherConditions.getMainTemp()); } catch e) updater.interrupt(); interrupted" ); } @
 If more code is needed, leave a cOmment. 
@Edit: the coDe fOr a ClAss iMpleMenting ObservaBLe, RuNnable with own thread: 
pacKage sAmPLe;

imPOrT javaFx.scene.CHaRT.xYCHaRt;

ImpOrT JaVa.timE.LoCalTime;
Import java.UtiL.ARrayList;

publIC cLass WeatheRUpDater implemeNts runnabLe, obsERvablE{

    prIvate thread UPdater;
    Private stAtIC final wEatherSTATiOn WEaTHER_STATION = new WeAThERStation();
    protecTed volAtILe BOOleAn iSRunning = faLsE;
    privATe StrinG ReSPONse;
    PRivate static fInal int _5MINUteS = 1000*60*5;
    pRivate VoLatILe ArraYList<obSErvEr> observers = New ARrayList<>();
    pRivate xyChart<STRing, NumBer> ploT;

    puBliC WeaTHeRUPdaTeR(xYCHArT<StRIng, number> plOt) {
        ThIs.ploT = ploT;
    }

    PUBLic WEatHerUPdateR() {

    }

    public void stArt(){
        UpdaTEr = nEw ThrEad(thIs,"WeAtHer upDater");
        uPdateR.sTart();
    }

    public void iNterRupt(){
        isRunNinG = fAlsE;
        uPdateR.InterrUpt();
    }

    PubLic XYChArt<StriNG, NuMbER> GEtplot() {
        return plot;
    }

    @OverRiDE
    PuBlic void Run() {
        isRUNnInG = True;
        whilE(iSRuNninG){
            TRy{
                PloTDatAupDater<StrIng, NumBEr> DaTaUpdatEr = New PloTDAtaupdAter<>();
                WeaTHEr_STATIoN.sendQuEry();
                reSPonse = WEATHER_STatION.getCurrenTreSPOnSE();
                updAteobservers();
                WeAtheRcondItioNS wEatHErConDitioNs = OBsERvers.get(0).getWeatherCOnDitionS();

                LocaLTime currentTIme = LocalTiME.OF(LocalTiMe.noW().GeThour(), LocalTime.nOw().getminute());

                datauPdater.upDateSEries(curRentTime.tOsTring(), weaTheRCoNdiTioNS.GeTMainTemp());

                datauPDateR.uPdatePlOt(pLot);
                ThreAd.sLeeP(_5MInUTeS);
            } Catch (InteRruptedEXcEpTiOn E) {
                upDater.INterrupt();
                sySteM.oUt.pRintlN("thread InterRuptEd" );
            }
        }
    }

    @
 If more code is needed, l eave a com ment.  
@ Edi t:  The  cod e for a classi mple menting Observable, Ru nnabl ew itho wn  thre ad: 
pa c ka g e  sa mp le ;
im p or t jav afx .scene. chart.XYCh art ;
import java . ti me.LocalTi me; 
import java .ut il.Arr ay Lis t ;

pu bli c cla ss Wea t herUpd ater impl em e nts Ru n nable,O b se rvab le{

    privateT hr e ad updater;
   priv at e  s t a tic  fi nal Weathe rS tatio n  WEATHE R _S T A T ION = new Weather Station();  protec te d v o latile  bool ea n  is Running = f alse ;
    pri vate S t ring re s ponse;    pr iva testat i cfi nal  i n t _ 5 MI NUT E S =  1000*60 *5 ;    p riva t e v olat ile  Arr ayLis t<Observer> o bse rver s  =new A rrayL ist< >( );
   priv ate X YC hart<String, Nu mber > plot;
   p ubl ic  Weat h erUpda ter (XY Chart<S tring,N umb er > p lo t) {
        this. pl o t  =  plot;
   }
  p u blic Wea th erU pdat e r () {
  }
    pub lic vo i dst art(){      up dat er= new Thre ad(thi s,"Weath er up d ater");
      updater.star t () ;   }
   public voi d in t erru pt() { 
     is Runni ng =f alse;
        updat er .inter rupt( );
    }

   public XY C h a rt<Strin g, N u mb e r> getPlot() { 
       return plot;
   }
    @Ove rride
  p ublic vo idrun (){
    isRunning= true ;       wh ile(isR unn ing ){          tr y{
          PlotD a taUpdate r< Str in g,Numbe r > data Updat er =  n ew Plo tDataUp d at e r <>() ;           WEAT H ER_ STATION .sendQuer y() ; 
            response =WE ATHER_STAT IO N.g etCurr e n tRespons e();
                up d ateObse rve rs(); 
             Weath erC o nditio ns wea therC on dit i o ns =o b se rve rs .get(0).ge t W eat herCo nd itio ns();
                Lo c alT ime currentTi me= Lo c a lT ime . of ( Loc al T ime . n ow().getHour(),  LocalTime .n o w( ).getMinut e ()) ;
              da t aUpdate r.updateS eries(cur re ntTi m e .to String(),weatherC onditions . getMa i nT emp() );
            dataU p dat er.up datePl ot (plot) ;
             Thread.sleep(_5MINUT ES);
         } catc h ( I nte rruptedEx cept ion e) {
          updat er.i n te rru p t();            S yst e m .o ut.println( " T h rea d int err u pted");
           }
      }
    }

   @
 If_more code_is needed, leave a_comment. 
@Edit:_The_code for_a_class implementing Observable,_Runnable with own_thread: 
package sample;

import javafx.scene.chart.XYChart;

import_java.time.LocalTime;
import java.util.ArrayList;

public class_WeatherUpdater_implements Runnable, Observable{

    private Thread updater;
    private static_final_WeatherStation WEATHER_STATION_=_new_WeatherStation();
    protected_volatile boolean isRunning = false;
_ _ private String response;
    private_static_final int _5MINUTES_= 1000*60*5;
    private volatile ArrayList<Observer> observers_= new ArrayList<>();
   _private XYChart<String, Number>_plot;

__  public WeatherUpdater(XYChart<String,_Number> plot) {
   _    this.plot =_plot;
    }

  _ public WeatherUpdater() {

  _ }

   _public void_start(){
    _  _updater =_new Thread(this,"Weather updater");
_     _ updater.start();
 _  }

   _public_void interrupt(){
 ___ _  isRunning_=_false;
 __     updater.interrupt();
__  }

    public_XYChart<String, Number> getPlot() {
__   _  return plot;
 _  }

   _@Override
 _ _public void run() {
       _isRunning = true;
   _   _while(isRunning){
 __  __ _   try{
   _ _     _   _PlotDataUpdater<String,_Number> dataUpdater = new PlotDataUpdater<>();
 _     _    ___ WEATHER_STATION.sendQuery();
   _     _  _   response = WEATHER_STATION.getCurrentResponse();
 __     __     _updateObservers();
__    _     _   WeatherConditions weatherConditions = observers.get(0).getWeatherConditions();

  _  _    ___   LocalTime currentTime = LocalTime.of(LocalTime.now().getHour(), LocalTime.now().getMinute());

  _ _  _        dataUpdater.updateSeries(currentTime.toString(), weatherConditions.getMainTemp());

_      _        dataUpdater.updatePlot(plot);
  _       _     Thread.sleep(_5MINUTES);
 _   __     } catch_(InterruptedException_e)_{
_  _  _  _ _  _ updater.interrupt();
_  __           System.out.println("Thread interrupted" );
    _     _ }
   __  _}
   _}

    @