Gå til innhold

Anbefalte innlegg

Heisann.

 

Et lite spørsmål angående Threads i java.

I C# kan vi lage en hvilken som helst metode å kjøre i en egen thread som dette:

Thread t = new Thread(new ThreadStart(sakesak));

private void sakesak()
{
//do something
}

 

Sånn som jeg har forstått det så kan Threads i java bare starte run() metoder, altså ikke angi en hvilken som helst metode. Stemmer dette?

Lenke til kommentar
Videoannonse
Annonse
Heisann.

 

Et lite spørsmål angående Threads i java.

I C# kan vi lage en hvilken som helst metode å kjøre i en egen thread som dette:

Thread t = new Thread(new ThreadStart(sakesak));

private void sakesak()
{
//do something
}

 

Sånn som jeg har forstått det så kan Threads i java bare starte run() metoder, altså ikke angi en hvilken som helst metode. Stemmer dette?

 

Sånn omtrentlig. http://www.exampledepot.com/egs/java.lang/BasicThread.html

 

run()-metoden kan kalle hvilke andre metoder den vil.

Lenke til kommentar
Sånn som jeg har forstått det så kan Threads i java bare starte run() metoder, altså ikke angi en hvilken som helst metode. Stemmer dette?

Det stemmer at Java mangler delegates, men at det er en litt rar tolkning av konsekvensen synes jeg. Det er jo ikke verre enn at du implementerer Runnable og kaller metoden din fra run():

public class MinKlasse implements Runnable {
public void run() {
	sakesak()
}
private void sakesak() {
	// ...
}
}

Og et annet sted:

new Thread(new MinKlasse())

Lenke til kommentar
Sånn som jeg har forstått det så kan Threads i java bare starte run() metoder, altså ikke angi en hvilken som helst metode. Stemmer dette?

Det stemmer at Java mangler delegates, men at det er en litt rar tolkning av konsekvensen synes jeg. Det er jo ikke verre enn at du implementerer Runnable og kaller metoden din fra run():

public class MinKlasse implements Runnable {
public void run() {
	sakesak()
}
private void sakesak() {
	// ...
}
}

Og et annet sted:

new Thread(new MinKlasse())

Var det jeg tenkte meg ja. Neida, det er ikke værre enn at jeg implementerer Runnable, men det er veldig unødvendig. Blir en ekstra metode som igrunn ikke er nødvendig dersom delegates fantes i java.

 

Men hva hvis jeg vil ha to kanskje flere tråder i samme programmet som starter forskjellige metoder. Hvordan gjør jeg det da? Kan jeg gi med et argument inn i run?

Lenke til kommentar
Men hva hvis jeg vil ha to kanskje flere tråder i samme programmet som starter forskjellige metoder. Hvordan gjør jeg det da? Kan jeg gi med et argument inn i run?

Nei, Runnable er definert som public void run(), så den kan ikke ta argumenter. Om du vil ha argumenter har du ikke så mange andre valg enn å lage dine egne implementasjoner av Runnable og sende disse med i feks constructor eller set-metoder.

 

Det er forresten ikke så uvanlig å bruke anonyme klasser som instanser av Runnable:

new Thread(new Runnable() {
public void run() {
	// ...
}
}).start();

Lenke til kommentar

Lenge siden jeg kodet Java, men jeg mener det er mulig å imlpementere et interface og instansiere det i samme statement: (forbehold om at det er en stund siden jeg skrev slik kode selv)

 

Thread t = new Thread( new Runnable(){ public void run() { sakesak(); } } );
t.start();

 

Kanskje ikke like estetisk som en C# delegate. (I denne sammenhengen er en Delegate forsåvidt bare en forenkling av ett interface med èn metode, slik at implementasjonen slipper å eksplisitt refere grensesnittet). Begge deler er fullgode Stragegy-implementasjoner.

Endret av MailMan13
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...