Jak uruchomić dwie funkcje w tym samym czasie ?

0

Jak uruchomić dwie funkcje w tym samym czasie ?
np w JavaScript da się zrobić tak:

timeout("funkcja",1000);
0

Skorzystać z wątku.

0

Chcę by od razu mi się coś robiło i obok tego coś innego.

0

Jak to. A jak są zrobione timery ? One działają podczas gdy funkcja main się wykonuje. No wiem że to jest od javy ale jakbym chciał "monitorować" jakieś kila rzeczy to musi być jakaś możliwość. PS: Jaki Executor Framework ? Co to ?

1

Executor Framework to zestaw narzędzi pozwalających na programowanie współbieżne, czyli "robienie dwóch rzeczy na raz".

1

Do timerów to konkretnie ScheduledExecutorService

0

No i w Java tego tak się po prostu nie da ?

2
Xix napisał(a):

Jak uruchomić dwie funkcje w tym samym czasie ?
np w JavaScript da się zrobić tak:

timeout("funkcja",1000);

JavaScript jest jednowatkowy, programista nie zrobi 2 rzeczy w tym samym czasie. Ten kod startuje timera i po uplywie sekundy funkcja zostanie wywolana w tym samym watku co reszta kodu, moze nawet dzielic ten watek z kodem do pobierania obrazkow, obslugi styli itp. i zablokuje na czas wykonania tej funkcji reszta kodu. Przyklad z d**y.

1

W JavaScript nie masz wielowątkowości jako takiej zatem i rozwiązania są inne. Najbliższe temu co pokazałeś w JS jest:

new Timer().schedule(new TimerTask() {
			@Override
			public void run() {
				System.out.println("Po sekundzie");
			}
		}, 1000L);
1
Xix napisał(a):

No i w Java tego tak się po prostu nie da ?

Da i to na wiele sposobow. Np:

new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("dupa"); } }, 1000);

(nie wiem czy dziala, mozliwe ze sie pomylilem w nawiasach itp.)

0

To jest jedyny sposób ( piszecie że nie więc dajcie jeszcze kilka na wszelki wypadek)? Może być. Ale jak sprawić żeby to się wykonało tylko raz i od razu bez tego "1000" (no bo 0 to chyba nie ). Nie ma w tym nic co mówi który raz się kod wykonuje (no bo tak to bym to if-em załatfił )

1

Jeszcze kilka? http://tutorials.jenkov.com/java-util-concurrent/executorservice.html Tego jest naprawdę dużo :)

0

A co to jest newFixedThreadPool(10); i czy trzeba coś importować (eclipse i tak mi podpowie) ?
PS: Właśnie o to mi chdziło :)

1

Nie da sie zrobic tak, zeby byla pewnosc ze cos sie wykona od razu, rownolegle. To zalezy od wielu rzeczy: OS, implementacji Javy, jaki scheuduler dany OS uzywa itp. Np. jesli zrobisz tak:

System.out.println("line a");
new Thread(new Runnable() { @Override public void run() { System.out.println("line b"); } }).start();
System.out.println("line c");

to jedyne co jest pewne jest to, ze "line a" bedzie wypisane przed "line c", oraz ze "line b" bedzie wypisane po "line a". Kolejnosci "line b" i "line c" w stosunku do siebie nie jestes w stanie okreslic bez dodatkowej synchronizacji. Ale poki co to tematy dla ciebie zbyt zaawansowane.

0

Dobra, dzięki. A co do tematów zaawansowanych to sobje kupię książkę chyba. Możecie mi doradzić jaką. No bo podstawy umiem czyli pentle, klasy, objekty itp.

1

Java Concurrency in Practice, ale IMO, widząc twoje obecne wątki, zostaw to sobie na trochę później i popracuj nad podstawami.

0

Czyli ? Nad czym konkretnie ?

1

@Xix nad intensywnym przysiedzeniem nad jednym, konkretnym językiem, najlepiej ukierunkowanym na jedną specjalizację, która ci sie podoba, żebyś z przyjemnościa i efektywnie złapał podstawy które wyjaśnią ci problemy które aktualnie posiadasz

1

Książka: http://helion.pl/ksiazki/java-podstawy-wydanie-ix-cay-s-horstmann-gary-cornell,javpd9.htm
Poza tym jest bardzo dobre Java Tutorials, które zawsze opisuje świeżą wersję Javy: https://docs.oracle.com/javase/tutorial/

0

No a co to są te podstawy. No bo pętle objekty klasy itp. to są podstawy z podstaw tak ? To czego mam się uczyć ? Samych nowych klas czy dalej czegoś "technicznego" ?

0

ucz się podstawowych elementów składni języka: przyjmijmy, że będzie to Java, jakieś fory/while/switch jak to działa, później możesz troche "ósemki" tj lambda, method reference
później oop: obiekty, klasy, klasy anonimowe, klasy abstrkacyjne, interfejsy, dla ósemki też: funkcje, FunctionalInterface itp

  • ważne, podstawowe klasy javy, jakieś StringBuildery, może jakieś okienka (mi sie na tym fajnie uczylo podstaw), metody do "obróbki" stringów, Timer, Comparable, Runnable, uruchomić jakiś wątek, zobaczyć jak to wygląda

jednym dwoma słowemami "pobawić się" językiem :P

0
Xix napisał(a):

No a co to są te podstawy. No bo pętle objekty klasy itp. to są podstawy z podstaw tak ? To czego mam się uczyć ? Samych nowych klas czy dalej czegoś "technicznego" ?

Przerób całą tą książkę co ci podałem "Java. Podstawy. Wydanie IX Autorzy: Cay S. Horstmann, Gary Cornell" i będziesz znał podstawy. Jak coś znasz to i tak poczytaj od deski do deski. Jedyną rzeczą, którą możesz pominąć są 10.3 Aplety, bo aplety są mocno blokowane w nowych wersjach Javy i chyba miałbyś problem z ich przetestowaniem.

0

Ja wiem co to switch itp. Nie rozumiem:
klasy abstrkacyjne
kalsy anonimowe
FunctionalInterface
Comparable
Runnable
lambda
method reference
StringBuildery ( chyba nigdy tego nie widziałem )

Ale tak źle ze mną nie jest że bym nie znał:
Timer
obróbka stringów (jeśli chodzi o substring itp. to znam już od dawna bo na YouTube są świetne kursy C++)
klasy
obiekty
interfejsy

Wiele znam ale może to nie jest jeszcze ułożone bo C++ trochę się różni. Wiem jak się tworzy okna w javax.swing

Zaczne się jeszcze uczyć C#. Ma tyle uproszczeń że nie wiem czy nie jest lepszy niż Java.
I czy konstruktor zawsze się wywołuje kiedy tworzę objekt czy trzeba zrobić tak: klasa objekt = new klasa(); ? Wiem że to podstawy ale nigdy tego nie sprawdzałem a często programów nie pisze.

0
Xix napisał(a):

Zaczne się jeszcze uczyć C#. Ma tyle uproszczeń że nie wiem czy nie jest lepszy niż Java.

Lepszy niz Java? Zdecydowanie tak (moim zdaniem). Prostszy? Latwiejszy do nauki? Zdecydowanie nie - ma znacznie wiecej pojec, wiecej mozliwosci, skladnia bardziej skomplikowana bo i sam jezyk wspiera wiecej. async, yield, propertiesy z prawdziwego zdarzenia, partial classes, static classes, delegaty, eventy - mozna wyliczac bez liku.

0

Niewiele jeszcze umiesz. A do C++ nie ma sensu robić zbyt silnych analogii. Zwykle różne platformy mają inne filozofie, więc zbyt mocne wyszukiwanie analogii doprowadzi do zamieszania w głowie.

W Javie by stworzyć obiekt trzeba użyć słówka new praktycznie zawsze. Czasem jest to jednak ukryte gdzieś w metodzie lub obiekt może zostać wstrzyknięty (jeśli używasz wstrzykiwania zależności). Zawsze jednak obiekt jest tworzony za pomocą new albo, rzadko i głównie we frameworkach, za pomocą refleksji (Class.newInstance lub podobne).

0

Czyli konstruktor zawsze się wykona ?
NP:

 public class x
 {
    int z;
    x()
    {
       z= 10 ;
    }
 }

x y ;

Co jest w z ?
Teraz się pogubiłem :)

0

W z nic nie ma, bo nie ma zadnego z. Ty tylko zdeklarowales referencje na x, ale nie utworzyles zadnej instancji. Java to nie cpp.

0

I wszystko stało się jasne. A jak to działa W C# ? Tak samo ?
Dzięki.

0

(ubolewam bo prawie nie zauwazylam nowego watku autorstwa pana @Xix).
co do pewnosci wywolania konstruktora w c# to mozesz sie troche przeliczyc, przy deserializacji konstruktor nie jest wolany wiec jesli twoja klasa wspiera serializacje to miej sie na bacznosci.

0

@katelx nie bardzo rozumiem. Serializujesz obiekt, który już jest utworzony i ma jakiś stan (tak jest i w c# i w javie). W takiej sytuacji po co miałby się uruchamiać jeszcze raz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1