I have public void run() method. Inside of run method i'm calling three(CurrentDate,generateReport and update) more methods like below. My doubt is, for run method i don't have any parameter to pass Details object. How to pass Details object to run method from junit test method. I have googled lot but no solution.
@Override
public void run() {
while(true) {
Details Obj = ruleQueue.peek();
if(Obj != null && CurrentDate(Obj)) {
ruleQueue.poll();
Generator generator = new Generator();
generator.generateReport(Obj.getId(),Obj.getLastExec(), ruleObj.getnextExec());
updateDate(Obj);
try {
dao.update(Obj);
}
catch (DocumentClientException e) {
logger.error(e);
}
}
}
}
You can't pass any arguments to the overridden run method. If you pass it's no longer overridden it's overloaded.
So better use the Thread constructor to share objects:
class MyThread implements Runnable{
private Details details;
public MyThread(Details details){
this.details = details;
}
@Override
public void run(){
// Use details here
}
}
For testing or calling this Thread:
Details details = new Details();
MyThread t = new Mythread(details);
t.start();