Vlastní anotace pro metody pro spuštění ve vlastním vlákně – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vlastní anotace pro metody pro spuštění ve vlastním vlákně – Java – Fórum – Programujte.comVlastní anotace pro metody pro spuštění ve vlastním vlákně – Java – Fórum – Programujte.com

 

ingiraxo+15
Grafoman
25. 12. 2013   #1
-
0
-

Zdarvím,

mám takový problém a nedaří se mi to nějak jednoduše vyřešit. Snažím se udělat anotaci na metodu, která by tu metodu zabalila do vlákna. Takže jakmile bych takovou metodu zavolal, tak by se vykonala asynchronně (ve vlákně).

Anotaci mám takto 

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Async
{}

2. otázka... Potom jsem narazil na takovou situaci, kterou nevím jak řešit. Pravděpodobně musím vždy zavolat nějakou metodu, která projde celou instanci třídy a vyhledá metody s touto anotací. Je vůbec nějaká možnost, aby se tohle dělat nemuselo? resp. abych si normálně vytvořil instanci třídy, kde se metoda nachází, zavolal jí a automaticky se spustila ve vlákně?

Díky za rady :-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Flowy0
Věrný člen
25. 12. 2013   #2
-
0
-

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

http://stackoverflow.com/questions/16539245/java-equivalent-of-c-sharp-async-await

abych si normálně vytvořil instanci třídy, kde se metoda nachází, zavolal jí a automaticky se spustila ve vlákně?

state pattern

Nahlásit jako SPAM
IP: 95.102.35.–
https://github.com/Flowy
ingiraxo+15
Grafoman
25. 12. 2013   #3
-
0
-

#2 Flowy
nechápeš... já vim jak fungují vlákna a async/await v C#, ale jde mi o to, jak tohle udělat pomocí anotací...

takže uvedu příklad, jak bych si to představoval - o co se vlastně pokoušim 

class Demo
{
    public void vypis() {
        System.out.println("text");
    }

    @Async
    public void vypisAsync() {
        System.out.println("text z vlakna");
        // uspi vlakno, ktere se vytvorilo pres anotaci @Async
        Thread.sleep(1000);
        System.out.println("hotovo");
    }
}

class App
{
    public static void main(String[] args)
    {
        Demo demo = new Demo();

        // vypise text pres vlakno z @Async
        demo.vypisAsync();

        // vypise text normalne (pres hlavni vlakno)
        demo.vypis();
    }
}

// Vysledek bude vypadat jako:

text z vlakna
text
hotovo

Nějak takto bych si to představoval. Když jsem viděl kolik a co všechno dokážou anotace ve Springu, tak si myslim, že tohle v SE javě taky musí nějak jít, ale nedaří se zatim :-(

Jde teda o to, aby při nastavení anotace @Async to tu metodu automaticky zabalilo do vlakna a do Runnable

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Flowy0
Věrný člen
26. 12. 2013   #4
-
-1
-
Mimo téma

   

public class App {

	public static void main(String[] args) {
		new Thread(new Runnable() {
			public void run() {
		        System.out.println("text z vlakna");
		        try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		        System.out.println("hotovo");
			};
		}).start();
		
		System.out.println("text");
	}

}

http://javapapers.com/core-java/java-annotations/

When Not to Use Annotations

Do not over use annotation as it will pollute the code.
It is better not to try to change the behaviour of objects using annotations. There is sufficient constructs available in oops and annotation is not a better mechanism to deal with it.
We should not what we are parsing. Do not try to over generalize as it may complicate the underlying code. Code is the real program and annotation is meta.
Avoid using annotation to specify environment / application / database related information.

Nahlásit jako SPAM
IP: 95.102.35.–
https://github.com/Flowy
lukber0
Newbie
26. 12. 2013   #5
-
0
-

Myslím, že by jsi pro volání metod (vypis a vypisAsync) musel implementovat nějakou servisu. Ta by v sobě pomocí reflexe kontrolovala existenci anotace. Myslím, že automaticky, aby to za tebe dělala virtuální mašina, nejde.

Nahlásit jako SPAM
IP: 89.103.94.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý