Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как можно организовать запуск и преостанов потоков одновременно (start+wait). / 7 сообщений из 7, страница 1 из 1
08.04.2006, 12:51
    #33653719
sysmanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
Вот такой код:
Код: plaintext
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.
import java.io.*;

public class TMain2 {
	
	public static void main(String argv[]) {

		class TThread extends Thread{
			private Thread thread;
			public TThread(Thread thread){
				this.thread=thread;
			}
			public void run(){
					try{

						System.out.println(":1");

						synchronized (this.thread ) {  // запускаем поток main
							if(this.thread.isAlive()){
								(this.thread).notify();
							}
						}
						System.out.println(":2");
					} catch (Exception e) {
						System.out.println(e);
					}
			}
		};

		TThread p=new TThread(Thread.currentThread());

		p.start(); // стартуем поток p
		System.out.println(":{"); 
		synchronized ( Thread.currentThread()) { //задержка потока main
	 		try{
			        Thread.currentThread().sleep(10000);
		        } catch (Exception e) {
		        	System.out.println(e);
		        }
	        }
		System.out.println(":}");
		synchronized ( Thread.currentThread()) { // останавливаем поток main
	 		try{
			        Thread.currentThread().wait();
		        } catch (Exception e) {
		        	System.out.println(e);
		        }
	        }

		System.out.println("exit");

	}
		
}


Проблемма заключается в том что хотелось бы запустить поток p и приостановить поток main одновременно, а затем поток p возобновил работу потока main. А то получается что возобновление потока main возможно быстрее приостановки потока main.
У меня есть одно не рациональное конструкция, в которой поток p будет ждать( с использованием sleep в цикле (что нерационально)) пока не заблокируется поток main, и затем разблокирует его.
Может ктонибудь знает метод запуска потока и преостановки текущего или как можно подругому это организовать?
...
Рейтинг: 0 / 0
09.04.2006, 01:41
    #33654096
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
м-м
не уверен, что понял что ты хочешь...
но есть такая штука, как Thread.join
этот метод автоматически приостанавливает текущий поток до окончания выполнения потока, у которого был вызван метод join.

короче: вызови p.join();

удачи :)
...
Рейтинг: 0 / 0
09.04.2006, 02:15
    #33654108
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
p.join() подошел бы, если бы main нужно возобновлять по окончанию p. Но тогда p вообще не нужен.

Чтобы p мог возобновить main, когда это будет нужно, и при этом смог сам продолжить работу, можно поступить в таком духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//поток main запускает p
 synchronized (main) {
    p.start();
    main.wait();
}

//поток p первым делом ждет, чтобы main уснул
 synchronized (main) {
}

//поток p возобновляет main
 synchronized (main) {
    main.notify();
}
На самом деле, это не лучший алгоритм. Но он будет работать хорошо, если с потоком p не возникнет никаких неожиданных ситуаций.
...
Рейтинг: 0 / 0
09.04.2006, 11:07
    #33654179
sysmanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
to Pitbull terrier:

Мне нужно чтото вроде join (дожидаемся завершения потока), но дожидатся надо некую точку в порождённом потоке, а не завершения (т.е. после синхронизации(точки) нужно делать некоторые вещи асинхронно с главным потоком).

to Ненавижу регистрацию:

а разве при остановке потока main (main.wait()), поток останица в критическойсекции (значит main заблокирован) и код:
//поток p первым делом ждет, чтобы main уснул
synchronized(main) {
}
некогда не запустится, т.к. объект main заблокирован.
...
Рейтинг: 0 / 0
09.04.2006, 11:38
    #33654195
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
sysmanxа разве при остановке потока main (main.wait()), поток останица в критическойсекции (значит main заблокирован) и код:
//поток p первым делом ждет, чтобы main уснул
synchronized(main) {
}
некогда не запустится, т.к. объект main заблокирован.
RTFM
...
Рейтинг: 0 / 0
09.04.2006, 11:54
    #33654201
sysmanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
to Ненавижу регистрацию:

Исходя из:
"The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method.
"
получается что при вызове wait блокировка снимается, а при возобновлении потока заново ставится.
Получается чтото вроде:
Код: plaintext
1.
2.
synchronized(main) { 
/*{*/}main.wait();synchronized(main) {/*}- одна команда wait*/
}
...
Рейтинг: 0 / 0
09.04.2006, 16:03
    #33654348
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
Думаю, у вас есть какая-нибудь книжка по Java. В ней механизм работы wait/notify описан, 100%.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как можно организовать запуск и преостанов потоков одновременно (start+wait). / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]