2010-06-23 2 views
3

Я использую сетевые компоненты для разработки Java. Я работаю над многопоточным приложением, и я хочу легко идентифицировать разделы кода, которые выполняются более чем одним потоком? Есть ли простой способ сделать это?Как определить разделы кода, выполняемые несколькими потоками

Например, если какое-либо поле метода класса ABC выполняется более чем одним потоком?

+2

Я не знаю, есть ли аналитический способ определить, если это возможно, может быть выполнена более чем одной нити (вероятно, нет), но вы можете войти протекторный ID потоков фактического выполнения его и посмотреть, если вы получить несколько идентификаторов потоков в одном и том же прогоне. –

+0

добавить несколько протоколов, которые также регистрируют имя темы? – Redlab

+0

Я уже использую технику регистрации ... Я надеялся, что есть инструмент, который проанализирует мой исходный код и определит такие разделы кода. – user318247

ответ

2

Это то, что может быть определено только во время выполнения.

Вы можете бросить этот метод до начала вызова метода, чтобы определить вызывающий поток.

public static void reportThread(String methodName) { 
    //Somehow LOG (println, logging framework) 
    LOG(methodName + " was ran on thread: " + Thread.currentThread().getName()); 

} 
2

В целом, невозможно выполнить статически, то есть путем проверки кода. (Проблема неразрешима из-за проблемы с остановкой.)

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

  • Добавить System.out.println(Thread.currentThread()) на интересные методы
  • использовать, например, AspectJ, чтобы сделать что-то подобное.