set Timer is not working in void loop()

I am using below code which is working fine, in that myThread.setInterval(5000); function working properly means when i upload code, LED will be start after 5 seconds

#include <Thread.h>

Thread myThread = Thread();
char powerValue;
int ledPin1 = 2;
boolean flag = false;
// callback for myThread
void myThreadCallback() {
 digitalWrite(ledPin1, HIGH);
}

void setup() {
 pinMode(ledPin1, OUTPUT);
 digitalWrite(ledPin1, LOW);
 Serial.begin(9600);
 
 myThread.onRun(myThreadCallback);
  flag =  true;
   myThread.setInterval(5000);
 
}

void loop() {
 if (Serial.available()) {
   powerValue = Serial.read();
   Serial.println(powerValue);
 }

 if (powerValue == 'A' ) {

   
   
 }
 else if (powerValue == 'a' ) {
   digitalWrite(ledPin1, LOW);
 }

 if (myThread.shouldRun() && flag == true)
     myThread.run();

 powerValue = 'Z';
}

but when i run same code with below changes LED lights up without waiting for 5 seconds, it will directly start

can anybody suggest me why this is not working when i setInterval code in void loop() function

#include <Thread.h>

Thread myThread = Thread();
char powerValue;
int ledPin1 = 2;
boolean flag = false;
// callback for myThread
void myThreadCallback() {
digitalWrite(ledPin1, HIGH);
}

void setup() {
pinMode(ledPin1, OUTPUT);
digitalWrite(ledPin1, LOW);
Serial.begin(9600);

myThread.onRun(myThreadCallback);


}

void loop() {
if (Serial.available()) {
  powerValue = Serial.read();
  Serial.println(powerValue);
}

if (powerValue == 'A' ) {
flag =  true;
  myThread.setInterval(5000);
  // checks if thread should run
  
}
else if (powerValue == 'a' ) {
  digitalWrite(ledPin1, LOW);
}

if (myThread.shouldRun() && flag == true)
    myThread.run();

powerValue = 'Z';
}
Thread myThread = Thread();

That is wrong. You should never call the constructor directly.

Thread pieceOfString;

The compiler will invoke the constructor as needed.

if (myThread.shouldRun() && flag == true)
    myThread.run();

Don't you want to do this only if the interval has been set?

I see that you are trying to do that, but flag is such a crappy name that it is not obvious what it is used for.

A link to the Thread library is in order.