Otazky

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: Otazky

Re: Otazky

od Betlista » 2. 2. 2010 13:08

V Jave sú principiálne 2 spôsoby ako vytvoriť vlákno, tak ako tu už bolo ukázané - oddedením z Thread.

Druhým spôsobom je implementovaním rozhrania Runnable, takto:

Kód: Vybrat vše

		new Thread(
			new Runnable() {
				@Override
				public void run() {
					System.out.println( "runnable" );
				}
			}
		).start();
Je potreba si uvedomiť, že nie vždy budete mať možnosť zmeniť hierarchiu tried. Vtedy keď si zmyslíte že potrebujete aby niečo bolo vláknom, tak nebude možné oddediť od triedy Thread (ako iste viete, tak v Jave je jednoduchá dedičnosť) a potom sa to urobí tak, že o danej triede prehlásite, že implementuje Runnable a jej inštanciu potom spustíte podobne ako je to ukázané vyššie, len s tým rozdielom, že tam som použil anonymnú triedu.

:!: Volanie start() v konštruktore by som nedoporučoval, aj keď to síce funguje (ako sa zdá), tak život vlákna je definovaný spôsobom, že vlákno končí keď sa ukončí vykonávanie metódy run(), lenže v tomto prípade konštruktor (vytváranie inštancie) skončí neskôr ako metóda run(), čo je dosť podivné.

Re: Otazky

od DM » 27. 1. 2010 10:58

JiriD píše:Nebo-li, statické funkce nejsou virtuální.

Jenom puntičkářská připomínka k těm vláknům: Nezapomenout na import java.lang.Thread;
Věci z java.lang se nemusí importovat. Já bych to napsal třeba takto:

Kód: Vybrat vše

public class Test {
    public static void main(String[] argv) {
        new Thread () {
            public void run() {
                System.out.println("TEXT");
            }
        }.start();
    }
}

Re: Otazky

od JiriD » 27. 1. 2010 10:05

Nebo-li, statické funkce nejsou virtuální.

Jenom puntičkářská připomínka k těm vláknům: Nezapomenout na import java.lang.Thread;

Re: Otazky

od Acris » 27. 1. 2010 02:23

Návštěvník píše:Zkousel jsem tento:
class A {
public static void foo() {
System.out.println("foo");
}
}

class B extends A {
public static void foo() {
System.out.println("bar");
}
}

main:
A a = new A();
A b = new B();

a.foo();
b.foo();
Z jakeho duvodu se zavola dvakrat foo z tridy A? Nemelo by se diky virtualnosti zavolat v druhem pripapde foo z tridy B? Diky!
Podstatné je, že ta funkce je static, tedy se nepojí ke konkrétní instanci, ale k typu, který je A.

Re: Otazky

od Návštěvník » 27. 1. 2010 01:59

Zkousel jsem tento:
class A {
public static void foo() {
System.out.println("foo");
}
}

class B extends A {
public static void foo() {
System.out.println("bar");
}
}

main:
A a = new A();
A b = new B();

a.foo();
b.foo();
Z jakeho duvodu se zavola dvakrat foo z tridy A? Nemelo by se diky virtualnosti zavolat v druhem pripapde foo z tridy B? Diky!

Re: Otazky

od test » 27. 1. 2010 01:21

ano, tak je spravna odpoved (muzes si to vyzkouset zejo :) ).

jak by podle vas bylo spravne napsane: Naprogramujte: V main vytvorete vlakno, kter vypise "TEXT" a spustte ho.

ja bych to delal tak ze v main bude jen
new TextThread();

a v TextThread.java bude:

Kód: Vybrat vše

public class TextThread extends Thread{
    public TextThread() {
        start();
    }

    public void run() {
           System.out.println("TEXT");
     }
    }
}
ale treba to chapu spatne..

Otazky

od Návštěvník » 27. 1. 2010 01:13

Ahoj, chtel bych se zeptat ohledne otazky 4c z ukazkoveho testu na wiki. Otazka zni:
int[] a, b[];
* A definuje jeden skalar a jedno pole intu
* B nejde prelozit
* C jedno 1-dim pole a jedno 2 dim pole
Jako odpoved bych videl:
C jedno 1-dim pole a jedno 2 dim pole
Co myslite? Kdyztak se ptejte i na dalsi otazky...

Nahoru