powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поток или метод
38 сообщений из 38, показаны все 2 страниц
Поток или метод
    #38410710
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
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.
public class TestRun extends Thread {
	
	private String str;
	
	public TestRun (String str) {
		this.str=str;
	}
	
	public void run() {
		System.out.println("без аргумента");
	}
	
	public void run (String str) {
		
		while(true){
			System.out.println("c аргументом: "+str);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public void start() {
		run (str);
	}
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class TestRunStart {

	public static void main(String[] args) {

		TestRun thread = new TestRun("111");
		thread.start();
	}
}



Если нужно передать параметр в метод старт, то thred запустится не как поток, а как обычный метод?
...
Рейтинг: 0 / 0
Поток или метод
    #38410711
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
другими словади, нужно чтобы по start() запустился run() с параметром
...
Рейтинг: 0 / 0
Поток или метод
    #38410717
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
public class TestRunStart {

    public static void main(String[] args) {
        new TestRun().start();
        new TestRun().start("1");
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class TestRun extends Thread {

    private String text;

    public synchronized void start(String text) {
        this.text = text;
        start();
    }

    @Override public void run() {
        if (text == null) {
            System.out.println("без аргумента");
        } else {
            try {
                while (true) {
                    System.out.println("c аргументом: " + text);
                    sleep(1000);
                }
            } catch (InterruptedException e) {}
        }
    }
}
...
Рейтинг: 0 / 0
Поток или метод
    #38410730
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mk, спасибо, то что надо!
...
Рейтинг: 0 / 0
Поток или метод
    #38410770
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда без веской причины не делайте extends Thread , так как это противоречит тому, как в джаве строится работа с потоками. Корректное решение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class TestRun implements Runnable {

    private String text;

    public TestRun (String text) {
        this.text = text;
    }

    @Override public void run() {
        if (text == null) {
            System.out.println("без аргумента");
        } else {
            try {
                while (true) {
                    System.out.println("c аргументом: " + text);
                    sleep(1000);
                }
            } catch (InterruptedException e) {}
        }
    }
}
...
Рейтинг: 0 / 0
Поток или метод
    #38410796
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv, насколько я знаю, основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.
...
Рейтинг: 0 / 0
Поток или метод
    #38410799
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поток или метод
    #38410800
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174cdtyjv, насколько я знаю, основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.Не понял вас. Runnable и Callable - два интерфейса, через которые можно и нужно определять задачи для потоков. Сам поток трогать не надо.
...
Рейтинг: 0 / 0
Поток или метод
    #38410804
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.Как раз таки, наоборот (если я конечно же Вас правильно понял). extends Thread - расширяем класс Thread .
...
Рейтинг: 0 / 0
Поток или метод
    #38410806
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174основное преимущество Runnable Основной смысл Runnable - фрагмент кода, который будет выполняться , например, в потоке.
...
Рейтинг: 0 / 0
Поток или метод
    #38410807
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
[offtop]
"Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы"

(С) Алан Кокс
Код: plaintext
[/offtop]
...
Рейтинг: 0 / 0
Поток или метод
    #38410828
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmanrema174основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.Как раз таки, наоборот (если я конечно же Вас правильно понял). extends Thread - расширяем класс Thread .

вот что я имел ввиду
авторThe most common difference is when you extends Thread class, after that you can’t extend any other class which you required. (As you know, Java does not allow inheriting more than one class). When you implements Runnable, you can save a space for your class to extend any other class in future or now.
...
Рейтинг: 0 / 0
Поток или метод
    #38410851
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174вот что я имел ввидуЭто то понятно. Общие принципы остаются неизменными.
Можно было не затрагивать конкретные реализации классов/интерфейсов, а выразиться в общих чертах.
Поэтому мы не так поняли. ;)
...
Рейтинг: 0 / 0
Поток или метод
    #38410859
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvНикогда без веской причины не делайте extends Thread , так как это противоречит тому, как в джаве строится работа с потоками. Корректное решение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class TestRun implements Runnable {

    private String text;

    public TestRun (String text) {
        this.text = text;
    }

    @Override public void run() {
        if (text == null) {
            System.out.println("без аргумента");
        } else {
            try {
                while (true) {
                    System.out.println("c аргументом: " + text);
                    sleep(1000);
                }
            } catch (InterruptedException e) {}
        }
    }
}



Свеном это некорректное решение

на Spark мы можем вполне получить
без аргумента

даже если передали стрингу
...
Рейтинг: 0 / 0
Поток или метод
    #38410906
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Свеном это некорректное решение

на Spark мы можем вполне получить
без аргумента

даже если передали стрингуПоясните почему?
...
Рейтинг: 0 / 0
Поток или метод
    #38410927
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если ты про final, то ты ошибаешься. Конструктор раннабл и запуск четко happens-before. rtfm
...
Рейтинг: 0 / 0
Поток или метод
    #38411097
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Это смотря как запускать

если executor.submit или thread.start то да.

Но если просто из другого потока дернуть то никакого HB не будет.

Поэтому код Свенома не до конца корректен и у нас в продукте ревью бы не прошел.
...
Рейтинг: 0 / 0
Поток или метод
    #38411100
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

http://shipilev.net/pub/talks/j1-April2013-jmm.pdf

Потому что нужно использовать точечный freeze happens-before который даёт модификатор final на полею
...
Рейтинг: 0 / 0
Поток или метод
    #38411272
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Это смотря как запускать
если executor.submit или thread.start то да.Во, видите, как интересно выходит. То есть, если запускать Runnable через Thread.start(), то все нормально, ибо между запуском потока и первым действием в Runnable стоит synchronized-with. Если запускать через executor, то тоже все нормально, так как там свои механизмы обеспечивают synchronized-with (например, Lock). А вот если ... а вот если ... а вот хз, какой еще там есть "если". Если только высасывать из пальца какую-то ерунду.

Коллега, ваша проблема заключается в том, что уже не первый раз пытаясь меня в чем-то подловить, вы лезете в какие-то узкие частности, которые совершенно не имеют отношения к контексту темы. Например, в этой теме автор учится запускать потоки. Его цель - понять, как между собой соотносятся Thread и Runnable. В этом контексте никаких проблем с видимостью нету, а следовательно совершенно не нужно грузить человека деталями вроде всяких happens-before, unsafe publication и модели памяти SPARC. Есть конкретный вопрос, есть не менее конкретный ответ. Когда у него возникнут вопросы по проблемам видимости или cемантики final полей, тогда и будем на них отвечать. А сейчас углубление в такие вещи принесет ему больше вреда, чем пользы.
Тоже самое относится и к случаю с соседнего топика, где вы меня упрекнули в "неоптимальности" удаления последовательных элементов в ArrayList. Ну да, можно сделать оптимальнее, но контекст то какой был? Он был такой, что автор немного затупил в сдвигах элементов в списке при удалении. И именно в этом ему надо было помочь, а не в рассуждениях о какой-то мифической "оптимальности".

Такие дела, коллега.
...
Рейтинг: 0 / 0
Поток или метод
    #38411282
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Судя по тому как ты отвечаешь я был прав.
Ты фокусник ибо вместо того чтобы внять тому что тебя учат ты чего то обижаешься как маленький.

Я не автору писал я тебе писал и пытался понять ход твоих мыслей.

Ты делаешь абстрактный многопоточный Runnable.

Сегодня это пример автора и у нас есть неявный HB, а завтра твой Runnable взяли в одном потоке заинстанциировали а вдругом дернули метод а потом - ай на проде где нехороший кастомер юзает Spark у нас случился NullPointer вот незадача.
Скажешь нереальный кейс ? У нас у клиентом сплош и рядом Sparkи на продах.

Профессионализм программиста заключается не в умении ***издить на форумах и не в умении проходить идиотские интервью с дибильными вопросами по Hibernate.


Профессионализм он в мелочах и понимании того что ты пишешь.
...
Рейтинг: 0 / 0
Поток или метод
    #38411365
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Я не автору писал я тебе писал и пытался понять ход твоих мыслей.Ну так я вам и объяснил ход своих мыслей. Он очень простой: помочь автору в том, в чем ему требуется помощь.

buldozer01Ты делаешь абстрактный многопоточный Runnable.
Сегодня это пример автора и у нас есть неявный HB, а завтра твой Runnable взяли в одном потоке заинстанциировали а вдругом дернули метод а потом - ай на проде где нехороший кастомер юзает Spark у нас случился NullPointer вот незадача.
Скажешь нереальный кейс ? У нас у клиентом сплош и рядом Sparkи на продах.Вот когда у автора будет такой код, тогда и поговорим. Сейчас же у автора стояла задача понять, как передать аргумент в Runnable, который запускается через Thread.start(). Эта задача и была решена

buldozer01Профессионализм программиста заключается не в умении ***издить на форумах и не в умении проходить идиотские интервью с дибильными вопросами по Hibernate.
Профессионализм он в мелочах и понимании того что ты пишешь.А профессионализм человека, который отвечает на вопросы других людей, заключается в том, что бы понятно и четко ответить на поставленный вопрос.
...
Рейтинг: 0 / 0
Поток или метод
    #38411392
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Берем код автора

автор
public synchronized void start(String text) {
this.text = text;
start();
}


Берем код Свенома

автор Свеном
public TestRun (String text) {
this.text = text;
}



У автора блок synchronized железобетонно обеспечит HB.

У Свенома и близко не лежало.

Отсюда вопрос - Как так можно отвечать на вопрос автора что в ответе мы имеем не до конца корректный код.

И этот человек еще хочет новичков учить Java.
...
Рейтинг: 0 / 0
Поток или метод
    #38411406
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01 ,
Коллега, проблема в том, что упомянутый вами synchronized не обеспечивает HB . Сами поймете, почему, или пояснить? В коде автора HB обеспечивается за счет метода Thread.start().
...
Рейтинг: 0 / 0
Поток или метод
    #38411506
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv, можно у вас немного поучиться?
По поводу этого топика, мне непонятно, как метод run() класса TestRun
в принципе может вывести сообщение "без аргумента", даже если его запустить извращенным способом,
как предлагает buldozer01.

Для проверки я написал следующий тест:
Код: java
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.
import org.junit.Test;

import java.util.Random;

/**
 * Тест потоков
 */
public class ThreadTest {
    private Runnable task;

    private boolean randomWait() {
        Random random = new Random();
        int waitTime = random.nextInt(1000);
        boolean interrupted = false;

        try {
            Thread.sleep(waitTime);
        } catch (InterruptedException e) {
            interrupted = true;
        }

        return !interrupted;
    }

    @Test
    public void happensBeforeTest() {
        Runnable createTask = new Runnable() {
            @Override
            public void run() {
                if (randomWait()) {
                    task = new TestRun("Все ОК!");
                }
            }
        };

        Runnable executeTask = new Runnable() {
            @Override
            public void run() {
                if (randomWait()) {
                    task.run();
                }
            }
        };

        Thread createTaskThread = new Thread(createTask);
        Thread executeTaskThread = new Thread(executeTask);

        createTaskThread.start();
        executeTaskThread.start();

        try {
            createTaskThread.join();
            executeTaskThread.join();
        } catch (InterruptedException ignored) {
        }
    }

    private static class TestRun implements Runnable {
        private String text;

        public TestRun(String text) {
            this.text = text;
        }

        public void run() {
            if (text == null) {
                System.out.println("Без аргумента");
            } else {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        System.out.println("С аргументом: " + text);
                        Thread.sleep(1000);
                    }
                } catch (InterruptedException ignored) {
                }
            }
        }
    }
}



Так вот, если поток выполнения работает до потока создания, будет выдано исключение NullPointerException
в строке
task.run();

и выполнение метода run(), который мог бы вывести "Без аргумента" даже не начнется.

Такой, теоретический вопрос, можно ли как-то запустить run(), чтобы он вывел эту заветную строку?
...
Рейтинг: 0 / 0
Поток или метод
    #38411539
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTID ,
Вопрос хороший и резонный, но в двух словах на него ответить сложно. Если сжато, то проблема заключается в том, что если вы в одном потоке изменяете состояние какой-то ячейки памяти, то вы не обязательно увидите это из другого потока. На то есть несколько причин:
1) Кэширование на уровне процессора.
2) Out-of-order execution на уровне процессора
3) Различные оптимизации на уровне компилятора (он так же может поставить операции out-of-order, так же может что-то закэшировать, и т.д.).

Поэтому, разговор идет про то, что проинициализировав переменную в одном потоке, далеко не факт, что вы увидите это изменение в другом потоке, если не предпримите неких мер предосторожности.

Что бы лучше понять механизм этих проблем, и то, как их можно решать, рекомендую вам почитать следующие вещи:
1) Статья Шипилева - http://habrahabr.ru/post/143390/
2) Java Concurreny in Practice - глава про unsafe publication;
3) Почитать про synchronized-with в JLS Chapter 17.

Если у вас останутся вопросы (а вероятность этого достаточно велика ), то отпишитесь мне на почту (см. мой профиль), и я вам отдельно по Скайпу это объясню, так как у меня под это дело уже заготовлен и код, воспроизводящий подобного рода проблемы, и картиночки есть, и т.д.. Вам это поможет понять суть подобных проблем, а мне будет как тренировка объяснения этого немного замысловатого материала.
...
Рейтинг: 0 / 0
Поток или метод
    #38411610
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buldozer01, SparkSafe?
Код: java
1.
2.
3.
4.
5.
6.
7.
public class TestRunStart {

    public static void main(String[] args) {
//      new TestRun("Spark доволен?").start();
        new Thread(new TestRun("Spark доволен?")).start();
    }
}


Код: java
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.
//зачем здесь реализовывать Runnable (а не расширять Thread)? (если TestRun ни от кого не наследуется)
public class TestRun implements Runnable {

    private final String text;

    public TestRun() {
        this.text = null;
    }

    public TestRun(String text) {
        this.text = text;
    }

    @Override public void run() {
        if (text == null) {
            System.out.println("без аргумента");
        } else {
            try {
                while (true) {
                    System.out.println("c аргументом: " + text);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {}
        }
    }
}
...
Рейтинг: 0 / 0
Поток или метод
    #38411637
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

17.4.5. Happens-before Order

If x and y are actions of the same thread and x comes before y in program order, then hb(x, y).

If an action x synchronizes-with a following action y, then we also have hb(x, y).



любой последующий setText будет Hb с предыдущим
Ну и плюс thread.start конечно же обеспечит

Свеном признайся что ты ничерта про это не знал и побырому заботал после того как я тебе об этом сказал и теперь вот включил это в программу :)
...
Рейтинг: 0 / 0
Поток или метод
    #38411681
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01cdtyjv,

17.4.5. Happens-before Order

If x and y are actions of the same thread and x comes before y in program order, then hb(x, y).

If an action x synchronizes-with a following action y, then we also have hb(x, y).



любой последующий setText будет Hb с предыдущим
Ну и плюс thread.start конечно же обеспечит

Свеном признайся что ты ничерта про это не знал и побырому заботал после того как я тебе об этом сказал и теперь вот включил это в программу :)
Подскажите, зачем вызывать метод start(String text), который в свою очередь, вызовет метод start() класса Thread
в разных потоках ?

Когда из документации:
JDKpublic void start()
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

То есть метод ВООБЩЕ НЕЛЬЗЯ вызывать 2 раза,
но Вы предлагаете не просто вызвать его 2 раза, а еще и в разных потоках.
И потом рассказываете, что все будет нормально, из-за синхронизации.
Очень смешно
...
Рейтинг: 0 / 0
Поток или метод
    #38411693
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDbuldozer01cdtyjv,

17.4.5. Happens-before Order

If x and y are actions of the same thread and x comes before y in program order, then hb(x, y).

If an action x synchronizes-with a following action y, then we also have hb(x, y).



любой последующий setText будет Hb с предыдущим
Ну и плюс thread.start конечно же обеспечит

Свеном признайся что ты ничерта про это не знал и побырому заботал после того как я тебе об этом сказал и теперь вот включил это в программу :)
Подскажите, зачем вызывать метод start(String text), который в свою очередь, вызовет метод start() класса Thread
в разных потоках ?

Когда из документации:
JDKpublic void start()
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

То есть метод ВООБЩЕ НЕЛЬЗЯ вызывать 2 раза,
но Вы предлагаете не просто вызвать его 2 раза, а еще и в разных потоках.
И потом рассказываете, что все будет нормально, из-за синхронизации.
Очень смешно

Ай ай там же внутри еще и поток стартуют сразу же.

НЕ заметил каюсь :)
...
Рейтинг: 0 / 0
Поток или метод
    #38411745
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Ай ай там же внутри еще и поток стартуют сразу же.

НЕ заметил каюсь :)
Все ошибаются, просто лучше объяснять, а не тыкать носом в ошибки :-)
...
Рейтинг: 0 / 0
Поток или метод
    #38411779
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDbuldozer01Ай ай там же внутри еще и поток стартуют сразу же.

НЕ заметил каюсь :)
Все ошибаются, просто лучше объяснять, а не тыкать носом в ошибки :-)

Ну моя ошибка то чисто номинальная
syncronized таки обеспечит hb читаем спеку.

А вот мсье Свеном боюсь даже не знал про то что слово final надо писать когда инициализируешь конструктор в многопотчном окружении.
...
Рейтинг: 0 / 0
Поток или метод
    #38411780
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01НЕ заметил каюсь :)Бывает. Такое часто случается с людьми, которые вместо того, что бы вести конструктивный разговор, начинают переходить на личности.
Ну да ладно, надеюсь, все ваши вопросы теперь сняты. Если нет - с радостью помогу вам разобраться, пишите.
...
Рейтинг: 0 / 0
Поток или метод
    #38411785
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Свеном ты продолжаешь Pr войну а я тебе пытаюсь пояснить что моей ошибки по большому счету нет.

Я лишь говорил про связь syncrhonized И hb не вдаваясь в то что конкретно написано в setText.
...
Рейтинг: 0 / 0
Поток или метод
    #38411795
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Ну моя ошибка то чисто номинальная
syncronized таки обеспечит hb читаем спеку.

А вот мсье Свеном боюсь даже не знал про то что слово final надо писать когда инициализируешь конструктор в многопотчном окружении.Нет, не можете вы все таки успокоиться.
Постараюсь разжевать. В рассматриваемом случае synchronized не обеспечивает happens-before. Почему? Да потому, что что бы было HB, необходимо иметь минимум два участка кода, участвующих в HB.
JLS нам говорит, что в HB устанавливается между двумя входами в критическую секцию, защищенную одним и тем же монитором. А в рассматриваемом примере мы вызовем start() один и только один раз . Следовательно, в synchronized секцию мы так же войдем только один раз. А следовательно, никакого HB там не будет, ибо его просто напросто не с чем устанавливать.

Поэтому, использование synchronized в том месте является ошибочным, и если его убрать, то ничего в коде не изменится. Такой код, как вы выражаетесь, "не прошел бы code review" у меня. А у вас в конторе он бы прошел?

Наконец, с final вам уже давным давно объяснили, что Thread.start() устанавливает synchronized-with соотношение (а следовательно, и HB) между Thread.start() и первой операцией в созданном потоке. А следовательно, в примере автора, где он руками запускает поток, использование final не является обязательным, ибо там нет проблем с небезопасной публикацией.
...
Рейтинг: 0 / 0
Поток или метод
    #38411798
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Я лишь говорил про связь syncrhonized И hb не вдаваясь в то что конкретно написано в setText.Ну спасибо, что вы это мне сказали. Вопрос только - зачем? Что вам побудило взять некорректный код, и рассказывать мне про HB там, где его нет?
...
Рейтинг: 0 / 0
Поток или метод
    #38411799
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Все тушу свет
...
Рейтинг: 0 / 0
Поток или метод
    #38411803
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01cdtyjv,
Все тушу светДавайте так - если у вас есть, что сказать по делу, то говорите. Если нет - то давайте оставим этот разговор.
...
Рейтинг: 0 / 0
Поток или метод
    #38411811
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну учитывая, что мы играем в игру "придерись к слову другого", то поправлю себя: между выходом из критической секции и последующим входом в нее. Так вот, в нашем случае "последующего входа" нет.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Поток или метод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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