Mitt prog somnar inte

Java

6 svar · 451 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Trådstart#1

Hej! Håller på med en enkel javaövning. Mitt program ska vara inaktivt några sekunder. Felmeddelande:

D:\Berakning.java:13: cannot resolve symbol
symbol : method sleep (int)
location: class Berakning
sleep(i);
^
1 error

Tool completed with exit code 1

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
class Berakning
{ public static void main(String[]arguments)
{

kalle();
}

public static void kalle()
{
int i=3000;
System.out.println("lalale");
sleep(i);
System.out.println("lars");
}

}

Medlem sedan juni 200010 432 inlägg
#2

Det finns inget inbyggt objekt sleep() i Java, däremot i form av en metod till "Thread"!
Du kan skapa en tråd (Thread t = new Thread()) och använd t.sleep(_millisec_) i run() - metoden. Kolla i dokumentationen hur du ska göra!

Annars får du kanske skapa en egen sleep() - metod genom att t.ex hämta tiden/räkna upp/jämföra med givet värde.

Medlem sedan sep. 2001961 inlägg
#3

Normalt gör man såhär:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
try{
Thread.currentThred.sleep(<time in millis> );
}
catch(InterruptedException iex) { <some errorhandling if needed> }

Det är vist att göra en "hjälpklass" som har denna funktion om man måste sova trådar väldigt länge.

Lite trix. Ibland vill man låta en tråd vänta på att någon annan tråd skall göra något färdigt.

Då kan man använda funktionen Object.wait().

I det här exemplet så är det lite konstuerat... men jag tror ni fattar iden.

WaitEx.java (main)
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
class WaitEx {

public static void main(String\[\] args) {
Waiter w = new Waiter();
w.start();
Caller c = new Caller(w);
c.notifyWaiter();
} // main

}

Waiter.java

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
public class Waiter extends Thread {
boolean keeprunning = true;
public Waiter (){
System.out.println("Waiter created");
}

public synchronized void alarmbell(){	
notify();

}

private synchronized void waitForNotify(){

System.out.println("Waiter is waiting");
    try{
	wait();
    }	
    catch(Exception e) {e.printStackTrace();}

    System.out.println("Waiter notified");
    keeprunning=false;

}


public void run(){
System.out.println("Thread:"+this.getName());
while(keeprunning){
    waitForNotify();
}

}

}// Waiter

Caller.java
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
public class Caller {
Waiter waiter;
public Caller (Waiter w){
waiter = w;
System.out.println("Caller created");
}

public void notifyWaiter() {
try{
    Thread.currentThread().sleep(10\*1000);

}
catch(Exception e){}

System.out.println("Notifying...");
    waiter.alarmbell();
}

}// Caller

/Lime (gör nästan en Ernst...)

Medlem sedan juni 200010 432 inlägg
#4

/Lime (gör nästan en Ernst...)

Nästan...? :p ;)

Medlem sedan sep. 2001961 inlägg
#5

Ja, nästan. Ibland så används Thread.sleep() lite vårdslöst. Man låter en tråd sova en stund för att sedan kolla om något som man väntar på finns. Om det inte finns så somnar man om i tråden och så håller man på så tills resurserna som man väntar på finns.

Då är wait/notify bättre ur effektivitetssynpunkt.

Man kan också använda sig av samordningsobjekt som man gör notify på.

/Lime

Medlem sedan juni 200010 432 inlägg
#6

Till skillnad från Ernsts numera ökända självutnämna skola, gav detta något... ! Bra med dyl tips, Tack Lime ;)

Medlem sedan sep. 2001961 inlägg
#7

Tack. Bara för att göra lite reklam... (vilket egentligen är förbjudet på sådan här forum) så håller jag och en arbetskamrat på med att sätta ihop en kurs i "Effektiv Javaprogrammering".

Skulle det vara en intressant kurs? Har ni tur så lägger jag ut diverse godbitar. ;-)

/Lime

297 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
162 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)