[java] indefinite postponement & deadlock

Pagina: 1
Acties:

  • acq
  • Registratie: Mei 2000
  • Laatst online: 30-03-2023

acq

ing. en dan? :D

Topicstarter
Deze vraag valt onder de categorie huiswerk.

Ik moet als opdracht een voorbeeld geven van indefinite postponement & deadlock in multi threaded programma's. Voor diegenen die 't kennen: Java how to program. Daar komt die opdracht uit.

Voor postponement had ik bedacht om 2 threads aan te maken, waarbij de 1e thread een random (of ingegeven aantal seconden) gaat slapen en thread 2 de eerste moet joinen zodra de eerste klaar is. Als je dan als voorbeeld een random tijd gebruikt, dan heb je in principe indefinite postponement.

Voor deadlock wilde ik met setPriority een hele lage prioriteit meegeven aan 1 thread.

Voor beiden kom ik er echter niet uit, omdat ik de werking van threads zoals men dat in het boek doet, niet kan volgen.

Wat ik dus niet snap is hoe ik na het starten van threads het join commando of setpriority moet geven. De help in JBuilder e.d. helpt me daar ook niet erg bij. Iemand een hint?

Na 5 jaar toch maar eens een nieuwe sig :X | Roze nerdjes; ze bestaan ;P | All we need is one world wide vision - Queen | Novell servers reboot je om 11 uur, logisch toch? |:(


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Een deadlock is meer iets als A wacht op B en B wacht op A. Wat je met prioriteit wilt doen is mij niet helemaal duidelijk...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • acq
  • Registratie: Mei 2000
  • Laatst online: 30-03-2023

acq

ing. en dan? :D

Topicstarter
Op dinsdag 16 april 2002 15:32 schreef Janoz het volgende:
Een deadlock is meer iets als A wacht op B en B wacht op A. Wat je met prioriteit wilt doen is mij niet helemaal duidelijk...
Tnx :)

Niet helemaal goed geschreven van mij inderdaad. Als je een hele lage prioriteit meegeeft, is dat indef post.. en noemen ze dat ook wel starvation. Dat laatste had ik ff met deadlock geassocieerd :)

Maar goed, wat ik probeer is ditte:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class ThreadTester2 {
   public static void main( String args[] )
   {
    PrintThread thread1, thread2;

    thread1 = new PrintThread( "thread1" );
    thread2 = new PrintThread( "thread2" );

    System.err.println( "\nStarting threads" );

    thread1.start();


    System.err.println( "Threads started\n" );
   }
}

class PrintThread extends Thread {
   private int sleepTime;

   public PrintThread( String name )
   {
    super( name );

    // sleep between 0 and 5 seconds
    sleepTime = (int) ( Math.random() * 5000 );

    System.err.println( "Name: " + getName() +
                  ";  sleep: " + sleepTime );
   }

   public void run()
   {
    try {
       System.err.println( getName() + " going to sleep" );
       Thread.sleep( sleepTime );
    }
    catch ( InterruptedException exception ) {
       System.err.println( exception.toString() );
    }

    // print thread name
    System.err.println( getName() + " done sleeping" );
   }

}

En ja, dit is naar aanleiding van een voorbeeld uit het boek.

Die eerste thread wordt dus al in slaap gestuurd. Maar de 2e thread de 1e laten joinen, lukt niet. JBuilder is dan zo'n lekker vaag programma met z'n meldingen.

Na 5 jaar toch maar eens een nieuwe sig :X | Roze nerdjes; ze bestaan ;P | All we need is one world wide vision - Queen | Novell servers reboot je om 11 uur, logisch toch? |:(


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

lees dit maar door:
http://developer.java.sun.com/developer/Books/performance2/
en dan mag je terug komen met vragen :) Hier staat vrij veel uitgelegd over threads, deadlocks, starvation, monitoren, semaphoren.