2016-03-15 4 views
0

У меня есть периодический поток, который запускается каждую секунду и ссылается на приложение. проблема в том, когда поток работает, использование процессора увеличивается, и программа очень плохо реагирует, кажется, процессорный процессор работает с полной мощностью. может быть, существует проблема с использованием бесконечного здесь. есть ли другой способ сделать это?поток, параллельный другому процессу java

Runnable r1 = new Runnable() { 
      public void run() { 
       try { 
       while (connect.isDisable()){ 
        refresher(rx); 
        Thread.sleep(1000L); 
       } 
       } catch (InterruptedException iex) {} 
      } 
      }; 
     Thread thr1 = new Thread(r1); 
     thr1.start(); 

если есть альтернативный способ, который thhis наборов функций запуска каждый один secounds параллельно другой процесс и обработчики событий, которые реагируют так же, как нормально?

+1

Возможно, лучше использовать 'Timer' или' ScheduledExecutorService' вместо того, чтобы помещать поток в режим сна. Что делает 'refresher'? Это интенсивность процессора? – bradimus

+0

Если вы используете Eclipse или аналогичную IDE, он не завершит процесс, когда вы начнете новый, по умолчанию, так что вы можете просто иметь тонны экземпляров одного и того же кода одновременно и управлять вашими орехами вентилятора. –

+0

@bradimus читает строку из последовательного порта и анализирует ее и обновляет диаграммы в приложении новыми данными –

ответ

1

Для начала thread представляет собой последовательность выполнения инструкций или кода в программе и ничего не представляет собой аппаратное обеспечение. Это поток исполнения, который имеет место.

Нить исполнения - это наименьшая последовательность запрограммированных команд, которые могут управляться независимо планировщиком, который обычно является частью операционной системы.

И да, несколько threads могут работать одновременно, если ваш процессор имеет более одного ядра. Это, конечно же, увеличит использование ЦП, поскольку одновременно выполняются несколько процессов или последовательность кодов. Вы просите, чтобы CPU выполнял 2 или более вещи одновременно, и поэтому использование является очевидным следствием.

О вентиле может быть спроектирован так, чтобы работать быстрее, когда использование ЦП выше, так что избыточное тепло генерируется эффективно.

+0

Спасибо за информацию. но refresher - это всего лишь небольшая часть кода и не очень тяжелая ... и в чем преимущество нити, когда этот маленький кусок кода делает мой процессор сумасшедшим. Я использую macbook pro retina, поэтому мой процессор не является низкоскоростным. может посоветовать новый код, который делает то же самое, но более эффективно на фоне приложения так, как пользователь не поймет? –

Смежные вопросы