---
title: "Mitt prog somnar inte"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/28374-mitt-prog-somnar-inte"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "clarkbones"
published: "2001-11-15T01:17:00.000Z"
updated: "2001-11-16T07:15:00.000Z"
replies: 6
views: 451
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/28374-mitt-prog-somnar-inte"
---

# Mitt prog somnar inte

## #1 — clarkbones, 2001-11-15T01:17Z

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");
	}
}

Permalänk: https://www.webforum.nu/p/28374

## #2 — PeW, 2001-11-15T07:01Z

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.

Permalänk: https://www.webforum.nu/p/402318

## #3 — Lime, 2001-11-15T09:47Z

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...)

Permalänk: https://www.webforum.nu/p/402319

## #4 — PeW, 2001-11-15T13:35Z

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

Nästan...?  :p  ;)

Permalänk: https://www.webforum.nu/p/402320

## #5 — Lime, 2001-11-15T14:32Z

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

Permalänk: https://www.webforum.nu/p/402321

## #6 — PeW, 2001-11-15T20:29Z

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

Permalänk: https://www.webforum.nu/p/402322

## #7 — Lime, 2001-11-16T07:15Z

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

Permalänk: https://www.webforum.nu/p/402323

---

Tråden på webben: https://www.webforum.nu/amne/java/28374-mitt-prog-somnar-inte
