Nano Hash - криптовалюты, майнинг, программирование

как правильно остановить и убить поток Twitter4j

Я пытаюсь использовать функции потоковой передачи Twitter4j. Итак, моя реализация находится в следующем классе:

public class TweetsStream {

    private TwitterStream m_twitterstream;
    private StatusListener m_statusListener;

    public void printStream(...)

        // Stream
        m_twitterstream = null;
        m_twitterstream = TwitterStreamFactory.getSingleton();

        // Listener
        m_statusListener = new StatusListenerRedefined(...);
        m_twitterstream.addListener(m_statusListener);

        // Filter
        FilterQuery l_filter = new FilterQuery();
        l_filter.track(... );

        // Launch
        m_twitterstream.filter(l_filter);
    }

    public void stopStream(){

        m_twitterstream.shutdown();
        m_logger.info("shutdown done");

        m_twitterstream = null;
        m_statusListener = null;
    }
}

Мой новый StatusListener() выводит статус в консоль.

Затем я создаю объект TweetsStream в другом классе сервлета:

@WebServlet("/Controler")
public class Controler extends HttpServlet {

    private static final long serialVersionUID = 1L;

    // Logger
    protected final static Logger m_logger = Logger.getLogger("Controler");

    //Stream    
    private TweetsStream m_tweetStream;



    //Function...
    m_tweetStream = new TweetsStream(...);
    m_tweetStream.printStream(...);

}

Поток работает идеально. Поэтому я пытаюсь сейчас остановить это. В том же классе у меня есть функция:

private void stopStream(){
 m_tweetStream.stopStream();
 m_tweetStream = null;
}

Поток остановлен в консоли, все нормально.

НО Когда я вспоминаю в том же классе свою функцию:

    //Function...
    m_tweetStream = new TweetsStream(...);
    m_tweetStream.printStream(...);

Это как если бы я только что возобновил предыдущий поток m_twitter с добавлением одного слушателя. Так что у меня по две копии каждого твита...

Как полностью убить поток? И когда я перезапускаю его, как только последний StatusListener ?

Спасибо !

03.06.2013

Ответы:


1

Вот решение:

Метод TwitterStreamFactory.getSingleton() возвращает тот же экземпляр TwitterStream.

Даже если вы правильно удалите свой объект TwitterStream, слушатели сохраняются в вашей конфигурации TwitterStream Singleton... Таким образом, вам нужно создать разные экземпляры объекта TwitterStream с помощью:

TwitterStreamFactory l_Twitterfactory = new TwitterStreamFactory();
m_twitterstream = l_Twitterfactory.getInstance();
03.06.2013
  • Примечание, если кто-то наткнется на этот пост: если вы используете аутентификацию, вам придется настроить twitter4j через файл twitter4j.properties, потому что getSingleton() не принимает ConfigurationBuilder. 06.10.2017

  • 2

    Я столкнулся с подобной проблемой. Тем не менее любое из вышеперечисленных решений не работает, поэтому я сделал обходной путь для этого сохраненного объекта twitterStream на карте. поэтому я могу получить тот же объект позже, когда мне нужно закрыть поток.

                ProfileEntity profileEntity = profileRepository.findBySocialId( twitterId+"" ) ;
                ConfigurationBuilder cb = new ConfigurationBuilder();
                cb.setDebugEnabled(true);
                cb.setOAuthConsumerKey( twitterCustomerKey );
                cb.setOAuthConsumerSecret( twitterCustomerSecret );
                cb.setOAuthAccessToken( profileEntity.getAccessToken() ) ; 
                cb.setOAuthAccessTokenSecret( profileEntity.getAccessTokenSecret() ) ; 
                twitterStream =  new TwitterStreamFactory(cb.build()).getInstance();
    
              twitterStreamMap.put( twitterId , twitterStream ) ;
    
    23.08.2016
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..