i have used timertask to schedule my java program. now when the run method of timertask is in process, i want to run two threads which run at the same time and do different functions. here is my code.. please help me..
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class timercheck extends TimerTask{
// my first thread
Thread t1 = new Thread(){
public void run(){
for(int i = 1;i <= 10;i++)
{
System.out.println(i);
}
}
};
// my second thread
Thread t2 = new Thread(){
public void run(){
for(int i = 11;i <= 20;i++)
{
System.out.println(i);
}
}
};
public static void main(String[] args){
long ONCE_PER_DAY = 1000*60*60*24;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 05);
calendar.set(Calendar.SECOND, 00);
Date time = calendar.getTime();
TimerTask check = new timercheck();
Timer timer = new Timer();
timer.scheduleAtFixedRate(check, time ,ONCE_PER_DAY);
}
@Override
// run method of timer task
public void run() {
t1.start();
t2.start();
}
}
Make use of a CountDownLatch if you want to start both threads at the same time.
Since you have the above code t1 becomes eligible to Run (Runnable) before t2. So it is upto Java Scheduler to select whether to intermix t1 and t2 or finish t1 first and then t2. But if you want both t1 and t2 wait for a cue to begin execute, CountDownLatch can help you with that.
For more information about CountDownLatch, Semaphore and CyclicBarrier read this post.
I think your threads are running at the "same" time. But because of race conditions, the first thread is just queueing its output before the 2nd. You will not see one line from thread-1 and then 1 line from thread-2. You will see blocks from one and then the other depending on the thread scheduling.
If you increase the amount of output from 10 lines to (for example) 1000, you should see that they are both running concurrently with interlaced output.