schedule refactor

1.job.run() only in excuteJob(), cancelJob() pop the job, then call excuteJob(), setTimer() only setTimeout the next job