Мне нужно время, необходимое для запуска каждого потока приложения, которое я написал, и я закончил и получил результат, но на самом деле не очень-то хороший способ чтобы убедиться, что я сделал это правильно. Раньше я никогда не делал ничего подобного. Если кто-то может дать мне быстрый корректор, это будет очень полезно.Является ли это подходящим способом совпадения потоков времени в Java
Вот код создания темы:
for (int i = 0; i < ROWS; i++) {
threads[threadCount] = new Thread(new TextDistanceThread("Macbeth.txt", "Othello.txt", i, 0));
threads[threadCount++].start();
threads[threadCount] = new Thread(new TextDistanceThread("Macbeth.txt", "HuckFinn.txt", i, 1));
threads[threadCount++].start();
threads[threadCount] = new Thread(new TextDistanceThread("Macbeth.txt", "TomSawyer.txt", i, 2));
threads[threadCount++].start();
threads[threadCount] = new Thread(new TextDistanceThread("Othello.txt", "HuckFinn.txt", i, 3));
threads[threadCount++].start();
threads[threadCount] = new Thread(new TextDistanceThread("Othello.txt", "TomSawyer.txt", i, 4));
threads[threadCount++].start();
threads[threadCount] = new Thread(new TextDistanceThread("TomSawyer.txt", "HuckFinn.txt", i, 5));
threads[threadCount++].start();
}
И коды резьбы:
public void run() {
long start = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
//DO SOME STUFF
long end = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
Driver.timeResults[0][row][col] = end - start;
Driver.results[row][col] = difference;
}
Хороший вопрос с идеей Thread.sleep(). Что касается массива, я подумал об этом, но действительно ли это проблема, если все потоки будут завершены до того, как я прочитаю массив? Например, если я использую Thread.join()? –
@Stephen Поскольку массив создается до того, как потоки запущены, каждый поток записывает только в одно особое место, и, по-видимому, массив читается только после присоединения всех потоков (в противном случае это очевидная проблема), которые утверждают неверно. Не существует условий гонки, и программа совершенно верна. Создание потоков и объединение потоков в обоих случаях происходит до отношений с предыдущим кодом в задействованных потоках, поэтому ни одно из двух потоков не записывается в одно и то же место, и между ними нет чередующихся чтений и записи без синхронизации. – Voo
Предпочитают использовать явно потокобезопасные классы для всех межпоточных связей. Кроме того, карта в любом случае является более чистой для этого варианта использования - вы сопоставляете потоки с значениями. – dimo414