2016-06-22 6 views
1

Я хочу открыть для себя свою локальную сеть, и мне нужно выполнить ping всех клиентов! что это требует времени! поэтому я хочу запустить процесс pinging в нескольких потоках, чтобы сделать это быстрее; и это моя попытка:, выполняющий метод асинхронно

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // For example 
    // host = "192.168.1."; 

    for (int i = 1; i < 255; i++) { 

     String ip = host + i; 

     new Pinging().execute(ip); 
    } 
} 


private class Pinging extends AsyncTask<String, String, Void> { 

    @Override 
    protected Void doInBackground(String... params) { 

     String ipAddress = params[0]; 

     Log.d("test", "Pingng " + ipAddress); 

     // Ping method 

     return null; 
    } 

} 

Я ожидаю, что 254 потока были сделаны и выполняют свою работу асинхронно!
Но, к сожалению, команды петли for занимают ~ 254 * 3 секунды.

В чем моя ошибка?

ответ

1

AsyncTask использует пулы потоков в фоновом режиме со значением по умолчанию 5. Таким образом, не более 5 потоков будут работать параллельно. Вам, вероятно, придется посмотреть managing your own thread pool

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