Подскажите пожалуйста, параллельно с обучением и задачами пытаюсь написать небольшое андроид-приложение. И всё вроде получается, но. Оно у меня многопоточное, в нём три дочерних потока. Все они парсят URL из некоторых источников в Интернете. Первый сравнивает названия введенное пользователем и массив из источника, и если названия совпадают он выводит все совпадающие.
Второй парсит и обрабатывает краткосрочный массив данных и выводит по названию результаты в UI. Третий парсит и обрабатывает долгосрочный массив данных по тому же названию и выводит результаты в UI. Всё это я успешно реализовал через AsyncTask но он объявлен устаревшим.
Хотел переписать встроенными средствами Java, но у меня там асинхронно всё работает в фоне и потки не должны блокировать друг-друга. Т.е. описанные в лекциях методы не подходят? Как мне это реализовать может кто-то подсказать, вместо AsyncTask? Читал что есть какой-то страшный ExecutorService и что можно через него, но что-то он пока для меня слишком уж страшный.
Добавляем секундомер на видео — еще одна фишка, которая будет удерживать внимание зрителя .
Он в рамках этого курса будет изучаться? Извините, что здесь задаю вопрос, может он тут не совсем по теме, но все же раздел многопоточности и хотелось узнать, помогут ли дальнейшие лекции с решением подобных задач?
Антон Виноградов Уровень 17
8 мая 2023
Странно, что валидатор не принимает такой вариант:
if (clock.isAlive()) clock.interrupt();
Василий Уровень 25
1 мая 2023
Кто хочет вкурить — это мастрид! Там идем в комменты, сортируем по популярности и читаем и лайкаем все от господина Pig Man.
Venya Ivanov Уровень 24
11 февраля 2023
То чувство когда с первой попытки решил hard правильно, но неправильно вывел строку «Марш!», написав «Мараш!», будьте внимательны друзья
Источник: javarush.com
Untitled
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
package com.javarush.test.level16.lesson07.task02;
/* Stopwatch (Секундомер)
1. Разберись, что делает программа.
2. Реализуй логику метода doSeveralSteps так, чтобы учитывалась скорость бегуна.
2.1. Метод getSpeed() в классе Runner показывает, сколько шагов в секунду делает бегун.
Нужно, чтобы бегун действительно делал заданное количество шагов в секунду.
Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов.
Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.
2.2. Метод sleep в классе Thread принимает параметр типа long.
public class Solution <
public static volatile boolean isStopped = false;
public static void main(String[] args) throws InterruptedException <
Runner ivanov = new Runner(«Ivanov», 4);
Runner petrov = new Runner(«Petrov», 2);
Секундомер — 1 минута (одна минута) Stopwatch — 1 minute (one minute)
ivanov.start();
petrov.start();
Thread.sleep(2000);
isStopped = true;
Thread.sleep(1000);
public static class Stopwatch extends Thread <
private Runner owner;
private int stepNumber;
public Stopwatch(Runner runner) <
this.owner = runner;
public void run() <
while (!isStopped) <
doSeveralSteps();
> catch (InterruptedException e) <
private void doSeveralSteps() throws InterruptedException <
stepNumber++;
long time = 1000;
if (owner.getSpeed() != 1.0)
time = (long) (1000 / owner.getSpeed());
Thread.sleep(time);
System.out.println(owner.getName() + » делает шаг №» + stepNumber + «!»);
public static class Runner <
private String name;
private double speed;
Stopwatch stopwatch;
public Runner(String name, double speed) <
this.name = name;
this.speed = speed;
this.stopwatch = new Stopwatch(this);
public String getName() <
return name;
public double getSpeed() <
return speed;
public void start() <
stopwatch.start();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement
GetText | 16 min ago | 0.25 KB
Lua | 18 min ago | 0.72 KB
Lua | 18 min ago | 1.82 KB
JSON | 19 min ago | 0.02 KB
Python | 29 min ago | 0.35 KB
Python | 29 min ago | 0.37 KB
HTML | 47 min ago | 4.89 KB
HTML | 1 hour ago | 18.04 KB
Advertisement
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
Источник: pastebin.com
Русские Блоги
Используйте секундомер для просмотра времени выполнения программы (обычные статьи)
В обычном развитии и в эксплуатации работы часто встречаются в эффективности выполнения программы. Это может определить некоторую логику, если можно оценить только общий опыт, но решение не является интуитивным, и эффективность низкая. В это время мы проверим некоторые более интуитивные методы, такие как см. Время выполнения программы, что определяет, если оно потребляет время. Более распространенным способом является использование System.CurrentTimeMillis (), когда программа запускается, а затем требуется время, чтобы принять разницу в два раза.
long stime =System.currentTimeMillis(); // . . код long etime =System.currentTimeMillis(); System.out.println(«время исполнения:»+(etime-stime));Копировать код
Но этот метод более неприятно, и если вы хотите соблюдать несколько программ выполнения кода, напишите еще код. Поэтому теперь вы можете использовать класс org.springframework.util.stopmatch непосредственно для получения статистического времени.
Это позволяет легко выполнить время выполнения каждого сегмента статистики и, наконец, выводится и отображать каждый раз, когда время пропорционально.
public void run() throws Exception < StopWatch stopWatch = new StopWatch(«demo1»); stopWatch.start(«step1»); step1(); stopWatch.stop(); stopWatch.start(«step2»); step2(); stopWatch.stop(); stopWatch.start(«step3»); step3(); stopWatch.stop(); System.out.println(stopWatch.prettyPrint()); > private void step1() throws InterruptedException < Thread.sleep(100L); >private void step2() throws InterruptedException < Thread.sleep(850L); >private void step3() throws InterruptedException < Thread.sleep(2000L); >Копировать код
StopWatch ‘demo1’: running time (millis) = 2972 —————————————— ms % Task name —————————————— 00108 004% step1 00861 029% step2 02003 067% step3
Из результатов видно, что общее время выполнения составляет 2972 м, время и долю каждого шага, так что мы можем легко исследовать эффективность того, что выполняется выполнение программы, что особенно удобно.
Хотя текущий метод очень мощный, его также легко использовать, но также необходимо написать много кода, и вторжение на наблюдаемый сегмент кода слишком велик. После наблюдения он также удалит код. Следующая статья Внедрит секундомер. Обратите внимание на использование, соблюдайте меньше кода, поэтому оставайтесь настроенными.
Перепечатано на: https: //juejin.im/post/59f749fa6fb9a0452b48849e
Источник: russianblogs.com