• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 188
  • Last Modified:

Using concurrency in new JDK 1.5

Hey there,

I have this small problem, that's been bugging me for the last two hours. I'm not a Java programmer, so this might be simple. I know that in the latest JDK and JRE there is a posibility to program using concurrency. After downloading J2SE 5.0 JRE and JDK I can't run this code below:

BTW, the code is 100% working, 'cause I saw it running at another computer with J2SE 5.0
Any help greatly appreciated: code below
---------------------------------------------
//    Dekoratyvinis sodas: 3 vartai, pro kiekvienus ileidziama po 100 zmoniu.
//    Koks bendras lankytoju skaicius sode?

import java.io.*;
import java.util.*;
import java.util.concurrent.Semaphore;
class Gija extends Thread {
  private String vardas;
  public Gija(String vardas) {
    this.vardas = vardas;
  }
  private void laukti(int kiek) {
    double x;
    for (int r=0;r<kiek*100+100000*(int)Math.random();r++)
      x=kiek*Math.random()/(Math.random()*Math.random()+2345.43);
  }
  private void inc()  {
        try {
    int k;
      // KS pradzia
    DekSodas.sem.acquire();                  
    k = DekSodas.bendrasLankytojuSk;
    k++;
    if (DekSodas.kiek>0)
      laukti(DekSodas.kiek);
    DekSodas.bendrasLankytojuSk = k;
    DekSodas.sem.release();  
      // KS pabaiga
  } catch (InterruptedException e) {}
  }
  public void run() {
    for (int i=0;i<100;i++) {
      inc();
    }
    System.out.println(vardas + " gija baige darba");
  }
}
//--------------------------------------------------------
class DekSodas {
    public static int kiek = 0;   // giju laukimui, g.b. imama is komandines eilutes
    public static int bendrasLankytojuSk = 0;
    public final static Semaphore sem = new Semaphore(1, true);
    public static void vykdytiGijas() {
            Gija g1 = new Gija("Pirma");
            Gija g2 = new Gija("Antra");
            Gija g3 = new Gija("Trecia");
            g1.start(); g2.start(); g3.start();
    //        while (g1.isAlive()||g2.isAlive()||g3.isAlive()) ;
              try {
              g3.join(); g2.join(); g1.join();
            } catch (InterruptedException e) {}
    }
    public static void main(String[] args) throws IOException {
            if (args.length > 0)
              kiek = Integer.parseInt(args[0]);
            vykdytiGijas();
            System.out.println("bendras lankytoju skaicius =" + bendrasLankytojuSk);
            System.out.println(" Pabaiga");
    }
}


0
dt27
Asked:
dt27
  • 2
2 Solutions
 
CEHJCommented:
Yes, although you ought to alter it:

a. Make DekSodas public
b. Save the code file as DekSodas.java
c. Compile and run.

This is the output:


Pirma gija baige darba
Antra gija baige darba
Trecia gija baige darba
bendras lankytoju skaicius =300
 Pabaiga
0
 
objectsCommented:
What problems are you having running the code?
0
 
dt27Author Commented:
That was a very strange problem, I might say. But I got it sorted out, and concurency now works fine. Thanks for your help.
0
 
CEHJCommented:
:-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now