Avatar billede abatabat Nybegynder
28. april 2006 - 14:29 Der er 11 kommentarer og
1 løsning

beskyttelse så der kun køres en funktion af gangen

jeg er igang med at program hvor jeg kalder to servletter, jeg skal så ledes ha en beskyttelse der gør at hvis jeg er igang med den ene bliver den anden sat i kø(evt. smidt væk), men jeg kender ikke så meget til java. Nogle der har nogle ider til hvordan det laves? fx noget med semaphore?
Avatar billede abatabat Nybegynder
28. april 2006 - 14:30 #1
gerne et lille eksempel
Avatar billede abatabat Nybegynder
28. april 2006 - 14:35 #2
har fundet dette, men kan ikke lige hitte ud af at bruge det, hvordan det kaldes osv..



public final class Semaphore
{
  public Semaphore() {
      value = 0;
  }
 
  public Semaphore(int v) {
      value = v;
  }
 
  public synchronized void P() {
      while (value <= 0) {
        try {
            wait();
        }
        catch (InterruptedException e) { }
      }
     
      value --;
  }
 
  public synchronized void V() {
      ++value;
     
      notify();
  }
 
  private int value;
}
Avatar billede arne_v Ekspert
28. april 2006 - 15:05 #3
er "en af gangen kravet" per bruger eller for hele applikationen ?

og hvorfor maa der kune koere en af gange ? (aarsagen kan muligvis give
nogle bedre loesninger)
Avatar billede abatabat Nybegynder
28. april 2006 - 15:15 #4
den ene servlet kaldes af en timer og den anden sevlet hvis man trykker på en kanp(bruger http request fra et java script), men det kan give nogle problemer hvis de kører begge to samtidigt, så jeg vil gerne ha noget beskryttelse så den med bruger trykket bliver sat i kø... og den anden droppes da der "hele tiden"(4 gg i sek) og derfor er der ikke noget krav om at den skal i kø
Avatar billede abatabat Nybegynder
28. april 2006 - 15:16 #5
men ved ikke om det bare kan løses med et par global variabeler
Avatar billede arne_v Ekspert
28. april 2006 - 15:21 #6
hvis det er per applikation saa kan du maaske
bare lade de kritiske kode sektioner i de 2 servlets
synchronize paa samme variabel ?
Avatar billede abatabat Nybegynder
28. april 2006 - 15:26 #7
oki hvordan bruger jeg synchronize ?
Avatar billede arne_v Ekspert
28. april 2006 - 17:31 #8
synchronized(variabel) {
  // kode
}

saa vil JVM kun koere den kode i en traad af gangen

(forudsaetter naturligvis at alle traade bruger samme variabel !)
Avatar billede abatabat Nybegynder
01. maj 2006 - 11:05 #9
oki, hvordan får jeg lavet en global variabel som jeg kan bruge i begge servletter?
Avatar billede arne_v Ekspert
01. maj 2006 - 12:59 #10
nemmest:

public class LockClass {
    public static Object mylock = new Object();
}

og så

synchronized(LockClass.mylock)
Avatar billede abatabat Nybegynder
01. maj 2006 - 13:13 #11
takker, smid lige et svar :)
Avatar billede arne_v Ekspert
01. maj 2006 - 13:14 #12
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester