|
|
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
Код: 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. Код: java 1. 2. 3. 4. 5. 6. 7. 8. Если нужно передать параметр в метод старт, то thred запустится не как поток, а как обычный метод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 16:05:17 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
другими словади, нужно чтобы по start() запустился run() с параметром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 16:08:59 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 16:27:37 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
avp.mk, спасибо, то что надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 17:01:48 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
Никогда без веской причины не делайте extends Thread , так как это противоречит тому, как в джаве строится работа с потоками. Корректное решение: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 18:45:02 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
cdtyjv, насколько я знаю, основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 20:25:54 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
cdtyjv, +100 rema174, http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 20:46:22 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
rema174cdtyjv, насколько я знаю, основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.Не понял вас. Runnable и Callable - два интерфейса, через которые можно и нужно определять задачи для потоков. Сам поток трогать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 20:46:59 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
rema174основное преимущество Runnable - это возможность экстендить класс, в то время как с Thread мы не сможем это сделать.Как раз таки, наоборот (если я конечно же Вас правильно понял). extends Thread - расширяем класс Thread . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 20:52:11 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
rema174основное преимущество Runnable Основной смысл Runnable - фрагмент кода, который будет выполняться , например, в потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 20:57:03 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
Код: plaintext (С) Алан Кокс Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 21:01:37 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 21:45:18 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
rema174вот что я имел ввидуЭто то понятно. Общие принципы остаются неизменными. Можно было не затрагивать конкретные реализации классов/интерфейсов, а выразиться в общих чертах. Поэтому мы не так поняли. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 22:19:33 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
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. Свеном это некорректное решение на Spark мы можем вполне получить без аргумента даже если передали стрингу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 22:32:54 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
buldozer01Свеном это некорректное решение на Spark мы можем вполне получить без аргумента даже если передали стрингуПоясните почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 00:19:03 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
если ты про final, то ты ошибаешься. Конструктор раннабл и запуск четко happens-before. rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 01:18:01 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
забыл ник, Это смотря как запускать если executor.submit или thread.start то да. Но если просто из другого потока дернуть то никакого HB не будет. Поэтому код Свенома не до конца корректен и у нас в продукте ревью бы не прошел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 16:34:52 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
cdtyjv, http://shipilev.net/pub/talks/j1-April2013-jmm.pdf Потому что нужно использовать точечный freeze happens-before который даёт модификатор final на полею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 16:37:46 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
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. Ну да, можно сделать оптимальнее, но контекст то какой был? Он был такой, что автор немного затупил в сдвигах элементов в списке при удалении. И именно в этом ему надо было помочь, а не в рассуждениях о какой-то мифической "оптимальности". Такие дела, коллега. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 23:39:57 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
cdtyjv, Судя по тому как ты отвечаешь я был прав. Ты фокусник ибо вместо того чтобы внять тому что тебя учат ты чего то обижаешься как маленький. Я не автору писал я тебе писал и пытался понять ход твоих мыслей. Ты делаешь абстрактный многопоточный Runnable. Сегодня это пример автора и у нас есть неявный HB, а завтра твой Runnable взяли в одном потоке заинстанциировали а вдругом дернули метод а потом - ай на проде где нехороший кастомер юзает Spark у нас случился NullPointer вот незадача. Скажешь нереальный кейс ? У нас у клиентом сплош и рядом Sparkи на продах. Профессионализм программиста заключается не в умении ***издить на форумах и не в умении проходить идиотские интервью с дибильными вопросами по Hibernate. Профессионализм он в мелочах и понимании того что ты пишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2013, 23:59:23 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
buldozer01Я не автору писал я тебе писал и пытался понять ход твоих мыслей.Ну так я вам и объяснил ход своих мыслей. Он очень простой: помочь автору в том, в чем ему требуется помощь. buldozer01Ты делаешь абстрактный многопоточный Runnable. Сегодня это пример автора и у нас есть неявный HB, а завтра твой Runnable взяли в одном потоке заинстанциировали а вдругом дернули метод а потом - ай на проде где нехороший кастомер юзает Spark у нас случился NullPointer вот незадача. Скажешь нереальный кейс ? У нас у клиентом сплош и рядом Sparkи на продах.Вот когда у автора будет такой код, тогда и поговорим. Сейчас же у автора стояла задача понять, как передать аргумент в Runnable, который запускается через Thread.start(). Эта задача и была решена buldozer01Профессионализм программиста заключается не в умении ***издить на форумах и не в умении проходить идиотские интервью с дибильными вопросами по Hibernate. Профессионализм он в мелочах и понимании того что ты пишешь.А профессионализм человека, который отвечает на вопросы других людей, заключается в том, что бы понятно и четко ответить на поставленный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 08:51:40 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
cdtyjv, Берем код автора автор public synchronized void start(String text) { this.text = text; start(); } Берем код Свенома автор Свеном public TestRun (String text) { this.text = text; } У автора блок synchronized железобетонно обеспечит HB. У Свенома и близко не лежало. Отсюда вопрос - Как так можно отвечать на вопрос автора что в ответе мы имеем не до конца корректный код. И этот человек еще хочет новичков учить Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 09:30:25 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
buldozer01 , Коллега, проблема в том, что упомянутый вами synchronized не обеспечивает HB . Сами поймете, почему, или пояснить? В коде автора HB обеспечивается за счет метода Thread.start(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 09:43:50 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
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. Так вот, если поток выполнения работает до потока создания, будет выдано исключение NullPointerException в строке task.run(); и выполнение метода run(), который мог бы вывести "Без аргумента" даже не начнется. Такой, теоретический вопрос, можно ли как-то запустить run(), чтобы он вывел эту заветную строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 11:13:49 |
|
||
|
Поток или метод
|
|||
|---|---|---|---|
|
#18+
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. Если у вас останутся вопросы (а вероятность этого достаточно велика ), то отпишитесь мне на почту (см. мой профиль), и я вам отдельно по Скайпу это объясню, так как у меня под это дело уже заготовлен и код, воспроизводящий подобного рода проблемы, и картиночки есть, и т.д.. Вам это поможет понять суть подобных проблем, а мне будет как тренировка объяснения этого немного замысловатого материала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 11:37:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38411100&tid=2128513]: |
0ms |
get settings: |
17ms |
get forum list: |
27ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
285ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
124ms |
get tp. blocked users: |
3ms |
| others: | 318ms |
| total: | 815ms |

| 0 / 0 |
