Определить, где в процессе мы находимся? - PullRequest
0 голосов
/ 30 марта 2012

У меня интересный вопрос, может ли кто-нибудь помочь мне придумать решение.Я порождаю 2 отдельных процесса, A и B. Подумайте о них, как о Очередь, ожидающая работы

  1. A заполняется и что-то делает
  2. A выполнено и передается на B
  3. B что-то сделать и закончить

Как мне определить, где в процессе мы используем Java?И как бы я остановил этот процесс, где бы мы ни были?

Спасибо!

Ответы [ 3 ]

1 голос
/ 30 марта 2012

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

В других языках существует концепция акторов, которые реализуют более надежную связь между потоками путем передачи сообщений. Посмотрите на Scala - он построен на основе Java. Или библиотека akka с версиями Scala и Java.

Если вам нравится думать об этом, попробуйте книгу прагматических программистов Семь языков за семь недель .

0 голосов
/ 30 марта 2012

Чтобы следовать этому процессу, вам понадобится другая нить (C), которая может считывать информацию о состоянии, выводимую A & B, и которая может запрашивать A & B, если они должны продолжаться.

Например, создайте интерфейс ProcessFollower двумя способами:

  1. void updateStatus (String)
  2. логическое shouldStop ()

C может реализовать этот интерфейс и передавать себя при вызове A, A передает ссылку на ProcessFollower (C) на B. Каждый раз, когда изменяется состояние, A и B вызывают updateStatus и в каждом случае (например, каждая итерация цикла ) они проверяют shouldStop (); если ложь, они просто возвращаются или тому подобное.

0 голосов
/ 30 марта 2012

вы можете добавить переменную currentStage и стадию обновления в разных местах вашего кода. Также сохраните ваши «регистры». Под этим я подразумеваю сохранение ваших локальных переменных, которые вас волнуют. Сериализуйте объекты и, возможно, поместите их в базу данных.

Затем, если вы выйдете и перезапустите компьютер, вы перейдете к последнему сохраненному этапу и восстановите соответствующие объекты из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...