DIMAN123456789 #81 31 декабря 2012 Ну, если я правильно понял, то ты, просто изменяешь во вторичном потоке, значение переменной и цикл так прерывается, но ведь это не трудно и не инетресено а вот как while(true) прерывать?например бросить эксепшен, я думал ты хотел какой-нибудь иллюстративный пример, вот и написал примитив. Поделиться сообщением Ссылка на сообщение
Гость 2poy_nyasha #82 31 декабря 2012 он разве не всю программу прервет? Кстати, вот что лучше использовать String или StringBuffer и когда и почему? хотя, никто не мешает сделать типаvolatile name(){while(true) {if(...) break;}} и просто менять условие, но это тоже примитив Поделиться сообщением Ссылка на сообщение
DIMAN123456789 #83 31 декабря 2012 (изменено) он разве не всю программу прервет? Кстати, вот что лучше использовать String или StringBuffer и когда и почему? хотя, никто не мешает сделать типаvolatile name(){while(true) {if(...) break;}} и просто менять условие, но это тоже примитивЭксепшен ты можешь перехватить в блоке try{}catch(...){}StringBuffer лучше вообще не использовать, он очень медленный и устаревший, лучше использовать StringBuilder. Если ты делаешь простые конкатенации строк и сразу вывод, то можно использовать String, но если ты, например, тащишь строку через весь код или нужно постоянно ее дописывать в циклах или еще где, то конечно лучше использовать StringBuilder. Вот простой пример:у тебя есть метод которые печатает страницу: public void printPage(OutputStream out) { String outputString = ""; outputString += printHead(); outputString += printBody(); out.print(outputString); } в данном случае намного лучше использовать StringBuilder, так как при каждом присваивании outputString += будет создаваться новый объект в куче, может в маленьких масштабах это и не заметно, но в больших проектах это очень хорошо видно, в таком случае рекомендуют писать так: public void printPage(OutputStream out) { StringBuilder sb = new StringBuilder(); printHead(sb); printBody(sb); out.print(sb.toString); } методы же printHead и printBody в свою очередь внутри себя будут вызывть метод append. Еще один классический пример, это набивание текста в цикле: String str = ""; for(int i = 0; i < 1000; i++) { str+="i = "+i; } тут каждый раз в цикле будет создаваться новая строка и присваиваться переменной str, старая же будет удалена только когда сработает gc.по-этому лучше делать так:final String STR_I = "i = "; StringBuilder sb = new StringBuilder(); for(int i = 0; i < 1000; i++) { sb.append(STR_I).append(i); } вообще идеально реализовывать в любых выводах интерфейс Appendable, тогда по идее ты сможешь писать вывод сразу в сокет, но в этом случае ни в коем случае нельзя допускать эксепшенов, ибо это сразу уходит на печать и уже не может быть откачено. Изменено 31 декабря 2012 пользователем DIMAN123456789 Поделиться сообщением Ссылка на сообщение
Гость 2poy_nyasha #84 31 декабря 2012 Хм, Ноутон и Шилдт не говорил ни слова про StringBuilder, но зато говорил что String не может контачиться с другой строкой, а может только менять указатель на новую строку. На джаве кто-то пишет веб? и да, надо ли вообще париться на счет gc или можно забить? Поделиться сообщением Ссылка на сообщение
TheDeadSkin #85 31 декабря 2012 а вот как while(true) прерывать?а ты знаешь другой способ прерывания бесконечного цикла кроме как break'ом? просто допустим убийство потока считается говнокодом и допустим в шарпе на даный момент вообще выпилено, в джаве не уверен, но вроде бы тоже Хм, Ноутон и Шилдт не говорил ни слова про StringBuilder, но зато говорил что String не может контачиться с другой строкой, а может только менять указатель на новую строку.StringBuilder sb = new StringBuilder("hui"); sb.Append(str1); sb.Append(str2); ... sb.Append(strN);>>>>string str = "hui"; str += str1; str += str2; ... str += strN; как-то так Поделиться сообщением Ссылка на сообщение
DIMAN123456789 #86 31 декабря 2012 Хм, Ноутон и Шилдт не говорил ни слова про StringBuilder, но зато говорил что String не может контачиться с другой строкой, а может только менять указатель на новую строку.StringBuilder sb = new StringBuilder("hui"); sb.Append(str1); sb.Append(str2); ... sb.Append(strN);>>>>string str = "hui"; str += str1; str += str2; ... str += strN; как-то такЧто ты хотел сказать этим? Поделиться сообщением Ссылка на сообщение
TheDeadSkin #87 31 декабря 2012 он спрашивал когда юзать билдер а когда стринг Поделиться сообщением Ссылка на сообщение
antirak #88 31 декабря 2012 он спрашивал когда, а не как За своей обоссаной помойкой следи, где блять инвалидам платится под 200к, половина трансферов уходит вникуда, молодежь превращается в полнейшее гавно и по кд все ноют гг мю Поделиться сообщением Ссылка на сообщение
TheDeadSkin #89 31 декабря 2012 ну так я и привёл пример ситуации когда билдер лучше стринга Поделиться сообщением Ссылка на сообщение
Kant #90 31 декабря 2012 спасибо, теперь понял что я упустил. рли спасибосамый главный совет.Эту задачу не надо решать рекурсией. Обычный цикл.Про возведение в степень, факториал и числа Фибоначчи - самые распространенные примеры на рекурсию в книгах. Но рекурсия там нахуй не нужна. Она будет работать гораздо медленней и жрать на порядки больше ресурсов. Двапою:Стринг - неизменяемый тип, как и все остальные типы значений. Каждый раз, когда ты добавляешь к строке какой-то символ, старая строка удаляется и на то же имя цепляется абсолютно новая строка.Из-за этого, если ты в цикле добавляешь к строке допустим какой-то индекс цикла + слово, твоя строка будет с каждым разом заново выделять память на ВСЮ строку, и с каждым разом делать это соответственно всё медленней.СтрингБилдер уже выделяет при добавлении память только под новый кусок. Из-за этого получается намного быстрее добавление.В конце просто у стрингбилдера вызвать ToString() и получить обычную строку. а вот как while(true) прерывать?а ты знаешь другой способ прерывания бесконечного цикла кроме как break'ом? просто допустим убийство потока считается говнокодом и допустим в шарпе на даный момент вообще выпилено, в джаве не уверен, но вроде бы тожев смысле выпилено? Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Поделиться сообщением Ссылка на сообщение
TheDeadSkin #91 31 декабря 2012 Ну тред.стоп() в шарпе не даёт заюзать этот метод и говорит, что этот метод is obsolete. Или я его с чем-то путаю, но когда я хотел останавливать поток извне у меня это не получалось. Поделиться сообщением Ссылка на сообщение
Kant #92 31 декабря 2012 Хм. А как они тогда предполагают прерывать внутренний поток, например, когда у тебя прога закрывается? Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Поделиться сообщением Ссылка на сообщение
TheDeadSkin #93 31 декабря 2012 IsBackground = true (или наоборот false, я блядь всегда и путаю)Когда выставлен правильный параметр, то при остановке главного потока такой поток тоже отваливается. Поделиться сообщением Ссылка на сообщение
Kant #94 31 декабря 2012 Не, ну это понятно. Вот например.У меня в доп потоке идет запрос к базе.В этот момент тупорылый юзер жмет крестик.Я ловлю событие, вижу, что поток запроса еще работает и спрашиваю этого утырка подтверждение.Если он все равно хочет выйти, я убиваю поток, сохраняю изменения и выхожу. А как теперь убить? Либо я делаю всё через жопу, в чем я буду не удивлен. Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Поделиться сообщением Ссылка на сообщение
TheDeadSkin #95 31 декабря 2012 Ну в формах в шарпе точно так, а когда я пытался сделать тред.стоп за ненадобностью потока меня слало нахуй http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx Вот тут, некоторые методы управления состоянием потока извне (в частности стоп саспенд резьюм) помечены obsolete Не, ну это понятно. Вот например.У меня в доп потоке идет запрос к базе.В этот момент тупорылый юзер жмет крестик.Я ловлю событие, вижу, что поток запроса еще работает и спрашиваю этого утырка подтверждение.Если он все равно хочет выйти, я убиваю поток, сохраняю изменения и выхожу. А как теперь убить? Либо я делаю всё через жопу, в чем я буду не удивлен.Никак, или жди конца работы изнутри потока или же закрывай программу, а поток сам отвалится Поделиться сообщением Ссылка на сообщение
Kant #96 31 декабря 2012 Хм, саспенд устаревший, а слип, который саспенд на время, не устаревший Есть вообще какие-нибудь книги по потокам? А то у меня часто создается впечатление, что я делаю всё через жопу. А найти, как правильно, не выходит Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Поделиться сообщением Ссылка на сообщение
TheDeadSkin #97 31 декабря 2012 на хабре должно быть овер 9к статей на эту тему, она очень заезжена Поделиться сообщением Ссылка на сообщение
Kant #98 31 декабря 2012 http://habrahabr.ru/post/164487/ Хабр вообще работает на какой-то магии.Только мне нужна статья, и она сразу появляется на главной Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью. Поделиться сообщением Ссылка на сообщение
Гость 2poy_nyasha #99 31 декабря 2012 http://habrahabr.ru/post/164487/ Хабр вообще работает на какой-то магии.Только мне нужна статья, и она сразу появляется на главнойохуенная статья, хоть я это все читал вчерано теперь я думаю, я знаю как все это реализовывать, чтобы оно работало не на магии Поделиться сообщением Ссылка на сообщение
TheDeadSkin #100 31 декабря 2012 http://habrahabr.ru/post/164487/ Хабр вообще работает на какой-то магии.Только мне нужна статья, и она сразу появляется на главнойя только что как раз зашёл сюда чтобы её отпостить Поделиться сообщением Ссылка на сообщение