Date: Sat, 18 May 2002 05:12:29 +0900 From: Fuyuhiko Maruyama <fuyuhik8@is.titech.ac.jp> To: "Amir Bukhari" <bukhari@fzi.de> Cc: freebsd-java@freebsd.org Subject: Re: AW: RMI and Thread with jdk1.3.1 Message-ID: <55661mfs9e.wl@dittohead.is.titech.ac.jp> In-Reply-To: <000001c1fdc0$250be810$3b00a8c0@C39> References: <200205170841.34641.ernsth@nl.euro.net> <000001c1fdc0$250be810$3b00a8c0@C39>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi,
On Fri, 17 May 2002 18:30:23 +0200, Amir Bukhari wrote:
>
> I use freebsd 4.5 StABLE.
>
> this the java version I use linux-jdk1.3.1 :
> java version "1.3.1_02"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
> Classic VM (build 1.3.1_02-b02, green threads, nojit).
>
> Note : I have also tried the port jdk1.3.1p5
>
> Sorry but I cant put the source code, because it very big ( more than
> 3000 lines), but I can put
> the main class, which provide RMI. I have build it with javac
>
> I know that java is independet plattform, therefor my programm should
> work also under freebsd,
> that mean there something wrong with my installation or I have missing
> to install something, there is a
> configuration I must do before using java,
> but I have installed java from the port collection, which install also
> dependeries.
>
> My main Program (Server) do the following:
> 1- run RMI Regestry at port 1099
> 2- then wait for a connection from the client, which a specified
> command.
> 3- when it received command from the client it then start the simulation
> Program, which should be run as Thread.
>
> Clien Site:
> the client only send the command to the server.
>
> Source code :
> import java.rmi.*;
> import java.rmi.server.*;
> import java.rmi.registry.*;
> import java.util.*;
> import java.net.*;
>
> class RMISimServerImpl extends UnicastRemoteObject
> implements RMISimServerInterface
> {
> int STOP = 1, START = 2 , PAUSE = 3, QUIT = 4, CONTINUE = 5;
> RMISimProtokol protokol = new RMISimProtokol();
> EventSimPar arg = new EventSimPar();
> String modell;
> int cmd = -1;
>
> public RMISimServerImpl() throws RemoteException {}
>
> public RMISimServerImpl(String filename, EventSimPar argument) throws
> RemoteException {
> modell = filename;
> arg = argument;
> }
>
> public void SendCommand(int command) throws RemoteException
> {
> cmd = command;
>
> System.out.println("Command was Send"); // as Tes, but this was not
> displayed when i have sended a command !!
> }
>
> public void SendEvent(RMIEvent rmievent) throws RemoteException
> {
> protokol.SetEvent(rmievent);
> }
> public void prozessCommand() {
> int command = -1;
> //System.out.println("Waiting for command");
> while(command == -1) {
>
> if (cmd == START) {
> protokol.SetCommand(cmd);
> EventSim evtSim = new EventSim(modell, arg); // this is The
> Simulation Programm which run as Thread
> evtSim.start();
> cmd = -1;
> } else if (cmd == QUIT) {
> protokol.SetCommand(cmd);
> command = 0;
> } else if (cmd == STOP) {
> protokol.SetCommand(cmd);
> }else if (cmd == PAUSE) {
> protokol.SetCommand(cmd);
> }else if (cmd == CONTINUE) {
> protokol.SetCommand(cmd);
> }
I think your program is stacking in this loop. This program seems
to expect other thread will have a thread of control during the thread
executing prozessCommand() is looping. However Java doesn't
guarantee that and our current JDK uses green_threads that doesn't
perform preemption so that your EventSim thread have a thread of
control. If you place a Thread.yield() here, your program will
start simulation.
This kind of polling loop shouldn't be written without special reason
for any programs including non-Java program. It only eats CPU but
produces nothing.
>
> }
> System.exit(0);
> }
--
Fuyuhiko MARUYAMA <fuyuhik8@is.titech.ac.jp>
Matsuoka laboratory,
Department of Mathematical and Computing Sciences,
Graduate School of Information Science and Engineering,
Tokyo Institute of Technology.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55661mfs9e.wl>
