powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как можно организовать запуск и преостанов потоков одновременно (start+wait).
7 сообщений из 7, страница 1 из 1
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33653719
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой код:
Код: 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
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654096
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м-м
не уверен, что понял что ты хочешь...
но есть такая штука, как Thread.join
этот метод автоматически приостанавливает текущий поток до окончания выполнения потока, у которого был вызван метод join.

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

удачи :)
...
Рейтинг: 0 / 0
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654108
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
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654179
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Pitbull terrier:

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

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

а разве при остановке потока main (main.wait()), поток останица в критическойсекции (значит main заблокирован) и код:
//поток p первым делом ждет, чтобы main уснул
synchronized(main) {
}
некогда не запустится, т.к. объект main заблокирован.
...
Рейтинг: 0 / 0
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654195
sysmanxа разве при остановке потока main (main.wait()), поток останица в критическойсекции (значит main заблокирован) и код:
//поток p первым делом ждет, чтобы main уснул
synchronized(main) {
}
некогда не запустится, т.к. объект main заблокирован.
RTFM
...
Рейтинг: 0 / 0
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654201
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как можно организовать запуск и преостанов потоков одновременно (start+wait).
    #33654348
Думаю, у вас есть какая-нибудь книжка по Java. В ней механизм работы wait/notify описан, 100%.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как можно организовать запуск и преостанов потоков одновременно (start+wait).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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