Wątki, wąteczki.

Wątki, wąteczki.
herbatek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rzeszów
  • Postów:71
0

Witam, mam małe zadanie do sprawdzenia.

Zaimplementuj metody:
public static void runThogether(Runnable... tasks)
public static void runInOrder(Runnable... tasks)
Pierwsza metoda powinna uruchomić każde zadanie w oddzielnym wątku i zakończyć działanie. Druga metoda powinna uruchomić wszystkie zadania w bieżącym wątku i zakończyć działanie po zakończeniu ostatniego z nich.

Kopiuj
public static void runTogether(Runnable... tasks) {

     for(Runnable n : tasks) {
         Thread thread = new Thread(n);
         thread.start();
     }
 }

 public static void runInOrder(Runnable... tasks) {

     for(Runnable n: tasks) 
         n.run();
 }

Jest okej, czy coś "pokiełbasiłem" ?

ŁF
Popraw temat na opisowy, albo wątek poleci do kosza.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Wydaje się ok, chociaż ja bym w 1 przypadku użył ExecutorService :) I z całkiem dobrej książki korzystasz :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
S9
Co to za książka ?
herbatek
Java 8 - Przewodnik doświadczonego programisty - Cay S. Horstmann
herbatek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rzeszów
  • Postów:71
0

Okej dzięki wielkie :3 Nie mam pojęcia JESZCZE co to jest ExecutorService :D
Swoją drogą często mam takie dylematy, czy na pewno dobrze zrozumiałem polecenie, czy na pewno wszystko dobrze wykonałem itp. Myślicie, że dobrym pomysłem jest zakładanie co kilka dni nowego tematu, czy może założyć jeden i co kilka dni wrzucać do niego nowe posty z nowymi "dylematami" ? Nie chciałbym zaśmiecać forum :<

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

W tej książce na początku działu o wielowątkowości jest o Executorach :P


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
herbatek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rzeszów
  • Postów:71
0

A to ja dopiero na interfejsach jestem :D Miałem tylko wzmiankę o wątkach i akurat miałem ćwiczenie z tego :D

S9
A. dobra to OK. W sumie sam zaniedługo będę chciał przerobić niektóre ćwiczenia to będe mógł się podzielić :)
herbatek
To jak przerobisz te ćwiczenia to możesz podesłać. Bo ja wszystkie zostawiam sobie w intellij i chętnie porównam czy podobnie zrobiliśmy :>
S9
Prawdopodobnie będe wrzucał na githuba ;]
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Rozwiązanie masz zgodne z treścią zadania, chociaż mi bardziej by pasowało jeszcze dodać join na końcu w runTogether - gdyby to nie było czysto dydaktyczne zadanie a np. praktyczny kod.
A jeśli jednak obie wersje miały by działać w tle bez czekania na zakończenie to użyłbym też ExecutorService.
Ta wersja w pierwszym poście jest za to przynajmniej bardzo czytelnie napisana.

Do wątków polecam:
"Java Threads and The Concurrency Utilities" - Friesen, Apress (zawiera ćwiczenia, zaleta - krótko i na temat)
Ew. "Java 7 Concurrency Cookbook" - Gonzalez, Packt (nie czytałem, ale wygląda na praktyczną)

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@vpiotr: w tej książce (z której ma ćwiczenia) to był dopiero początek, (rozdział o interfejsach, 3). Później będzie miał opisane lepsze mechanizmy w dziale o wielowątkowości (kolekcje, locki, executory etc), ale to kilka rozdziałów później ;)
Najpierw podstawy ;]
Zresztą tutaj masz spis treści : http://helion.pl/ksiazki/java-8-przewodnik-doswiadczonego-programisty-cay-s-horstmann,jav8pd.htm


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
vpiotr
Nie no spoko, do podstaw wszystkiego OK, tylko tam masz 40 stron o wątkach, ja napisałem na wypadek gdyby ktoś chciał się pouczyć coś więcej o wątkach.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)