Потоки! Как сделать работу потоков по очереди?
Поток 1 создал сообщение № 1
Поток 2 создал сообщение № 2
Поток 3 создал сообщение № 3
Поток 4 создал сообщение № 4
Поток 5 создал сообщение № 5
Поток 1 создал сообщение № 6
Поток 2 создал сообщение № 7
Поток 3 создал сообщение № 8
Поток 4 создал сообщение № 9
Поток 5 создал сообщение № 10
Поток 1 создал сообщение № 11
Поток 5 создал сообщение № 12
Поток 4 создал сообщение № 13
Поток 2 создал сообщение № 14
Поток 3 создал сообщение № 15
.
А теперь сам вопрос: как можно сделать, что бы потоки всегда работали по очереди и по возрастанию? Т.е. сначала 1, потом 2, потом 3 и тд.
Т.е. вывод должен быть всегда такой (не зависимо от кол-ва потоков):
Поток 1 создал сообщение № 1
Поток 2 создал сообщение № 2
Поток 3 создал сообщение № 3
Поток 4 создал сообщение № 4
Поток 5 создал сообщение № 5
Поток 1 создал сообщение № 6
Поток 2 создал сообщение № 7
Поток 3 создал сообщение № 8
Поток 4 создал сообщение № 9
Поток 5 создал сообщение № 10
Поток 1 создал сообщение № 11
Поток 2 создал сообщение № 12
Поток 3 создал сообщение № 13
Поток 4 создал сообщение № 14
Поток 5 создал сообщение № 15
.
Написать программу содержащий описание очереди и моделирует работу очереди
Написать программу (функцию main), содержащий описание очереди и моделирует работу очереди. Размер.
Как согласовать работу потоков с данными
Всем привет, как можно согласовать разбор некоторого листы данных с помощью потока и отследить его.
Как разграничить работу трех потоков и избежать конфликтов
Подскажите пожалуйста, впервые сталкиваюсь, наработок пока особо нет, то,что нашла касается только.
Используйте статический метод Thread.yield(). Он приостанавливает поток и передает управление другому потоку.
public class Main { public static void main(String[] args) { for (int i = 1; i 6; i++){ Thread t = new Thread(new Producer()); t.setName("Поток "+ i); t.start(); Thread.yield(); } } }
KEKCoGEN, мне просто для опыта. Можно ли организовать вывод потоков таким образом. Что бы они поочередно отрабатывали. По порядку.
Может счетчик какой привязать к каждому потоку.
Добавлено через 2 минуты
Просто нужно как бы заставить работать их не по штатному монитору. А так как нужно мне) ради опыта
Добавлено через 39 минут
yield() К сожалению не помогает =(
Сообщение от MaxXxon
Хотелось бы посмотреть как. Просто из любопытства.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public final class SequencedThreads { private static final int NWORKERS = 5; public static void main(String[] args) throws InterruptedException { final BlockingQueueResponse> responses = new ArrayBlockingQueue<>(1); final Worker[] workers = new Worker[NWORKERS]; for (int i = 0; i NWORKERS; i++) { final Worker w = new Worker(i, responses); workers[i] = w; new Thread(w, "Thread #" + i).start(); } for (int i = 0; i 20; i++) { final int workerId = i % NWORKERS; workers[workerId].send(new Request(i)); System.out.println(responses.take().getContent()); } System.exit(0); } static final class Request { private final int id; public Request(final int id) { this.id = id; } public int getId() { return id; } } static final class Response { private final String content; public Response(final String content) { this.content = content; } public String getContent() { return content; } } static final class Worker implements Runnable { private final int id; private final BlockingQueueRequest> requests; private final BlockingQueueResponse> responses; public Worker( final int id, final BlockingQueueResponse> responses ) { this.id = id; this.requests = new ArrayBlockingQueue<>(1); this.responses = responses; } public void send(final Request r) throws InterruptedException { requests.put(r); } @Override public void run() { try { while (true) { final Request r = requests.take(); final String msg = String.format("Worker #%d message #%d", id, r.getId()); responses.put(new Response(msg)); } } catch (final InterruptedException e) { Thread.currentThread().interrupt(); return; } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Worker #0 message #0 Worker #1 message #1 Worker #2 message #2 Worker #3 message #3 Worker #4 message #4 Worker #0 message #5 Worker #1 message #6 Worker #2 message #7 Worker #3 message #8 Worker #4 message #9 Worker #0 message #10 Worker #1 message #11 Worker #2 message #12 Worker #3 message #13 Worker #4 message #14 Worker #0 message #15 Worker #1 message #16 Worker #2 message #17 Worker #3 message #18 Worker #4 message #19
Java последовательное выполнение потоков
public class MyFirstThread extends Thread < @Override public void run() < switch (getName()) < case "Thread-0" ->System.out.println("Поток-0 достает яйца из холодильника"); case "Thread-1" -> System.out.println("Поток-1 включает плиту"); case "Thread-2" -> System.out.println("Поток-2 достает сковородку и ставит на плиту."); case "Thread-3" -> System.out.println("Поток-3 зажигает огонь на плите"); case "Thread-4" -> System.out.println("Поток-4 выливает на сковороду масла"); case "Thread-5" -> System.out.println("Поток-5 разбивает яйца и выливает их на сковороду"); case "Thread-6" -> System.out.println("Поток-6 выбрасывает скорлупу в мусорное ведро"); case "Thread-7" -> System.out.println("Поток-7 снимает готовую яичницу с огня"); case "Thread-8" -> System.out.println("Поток-8 выкладывает яичницу в тарелку"); case "Thread-9" -> System.out.println("Поток-9 моет посуду"); > //System.out.println("I'm Thread! My name is " + getName()); > public static void main(String[] args) < for (int i = 0; i < 10; i++) < MyFirstThread thread = new MyFirstThread(); thread.start(); >> >
«В некоторых штатах Индии вам не продадут землю сельскохозяйственного назначения, если вы не зарегистрированы как фермер. При этом вас не зарегистрируют в качестве фермера, если вы не владеете сельскохозяйственными землями». Перефразирую на реальные факты : «В IT компанию вас не возьмут на работу, если у вас нет опыта. При этом вы не получите опыт, если не работаете в IT».