Перегрев процессора при чтении файла в Java с помощью TimerTask - PullRequest
0 голосов
/ 17 июня 2020

Я делаю что-то вроде комплекта разработчика симулятора IOT. Чтобы постоянно обновлять статус моих устройств (сохраненный в разных файлах), я создал TimerTask с частотой обновления sh 10 мс, который непрерывно считывает строку. Это код:

public void update() throws IOException {
        File f = new File("ClaireSDK/sensor/"+id+".sensor");
        Timer t = new Timer();
        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                try {
                    Scanner s = new Scanner(f);
                    String line = s.next();
                    StringTokenizer st = new StringTokenizer(line,";;;");
                    id = st.nextToken();
                    isTurnedOn = Boolean.valueOf(st.nextToken());
                    input = st.nextToken();
                    output = st.nextToken();
                    if(isTurnedOn) {
                        switchButton.setForeground(Color.GREEN.darker());
                        switchButton.setText("ON");
                    }
                    else {
                        switchButton.setForeground(Color.RED.darker());
                        switchButton.setText("OFF");
                    }
                    updateGui();
                    revalidate();
                    repaint();
                    s.close();
                } catch (Exception err) {

                }
            }

        }, 0, refreshRate);
    }

Я пробовал с BufferedReader, но результаты те же. Обновите GUI метод refre sh a JTextField, который печатает состояние устройства. В любом случае, добавив три или четыре устройства в мою симуляцию, мой процессор и графический процессор нагреваются до 101 ° C, а скорость вращения вентилятора увеличивается очень быстро. (У меня MacBook Pro).

enter image description here

Что мне нужно сделать, чтобы улучшить свой код?

...