Несколько ошибок в вашем фрагменте кода:
- Вы расширяющие
Thread
класс, который не очень хорошая практика
- У вас есть
Timer
в пределах Thread
? Это не имеет смысла, поскольку a Timer
работает самостоятельно Thread
.
Вы должны достаточно (когда/где это необходимо), реализовать Runnable
см here на короткий пример, но я не вижу необходимости как в Thread
и Timer
в фрагменте кода вы дали.
Пожалуйста, смотрите ниже пример рабочего Timer
который будет просто увеличивает счетчик на единицу каждый раз, когда она вызывается (каждые 3seconds):
import java.util.Timer;
import java.util.TimerTask;
public class Test {
static int counter = 0;
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("TimerTask executing counter is: " + counter);
counter++;//increments the counter
}
};
Timer timer = new Timer("MyTimer");//create a new Timer
timer.scheduleAtFixedRate(timerTask, 30, 3000);//this line starts the timer at the same time its executed
}
}
Добавление:
я сделал короткое пример включения Thread
в смесь. Так что теперь TimerTask
будет только увеличиваться counter
на 1 каждые 3 секунды, а Thread
покажет counter
сек значение сна в течение 1 секунды каждый раз, когда он проверяет счетчик (он завершает свою работу и таймер после counter==3
):
import java.util.Timer;
import java.util.TimerTask;
public class Test {
static int counter = 0;
static Timer timer;
public static void main(String[] args) {
//create timer task to increment counter
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// System.out.println("TimerTask executing counter is: " + counter);
counter++;
}
};
//create thread to print counter value
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("Thread reading counter is: " + counter);
if (counter == 3) {
System.out.println("Counter has reached 3 now will terminate");
timer.cancel();//end the timer
break;//end this loop
}
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
});
timer = new Timer("MyTimer");//create a new timer
timer.scheduleAtFixedRate(timerTask, 30, 3000);//start timer in 30ms to increment counter
t.start();//start thread to display counter
}
}
http://www.ibm.com/developerworks/java/library/j-schedule/index.html – nullpotent
Вы уверены, что создаете поток 'temperatureUp' и вызываете' start() 'на нем? Этот код отлично подходит для меня. –
Зачем вам использовать поток и таймер? Таймер работает на собственной ветке –