[Java lista] java program folyamatok

Muskovics Gábor m..g at freemail.hu
2007. Jún. 15., P, 22:07:19 CEST


Annyit csinálna ez a kód, hogy ha kapcsolódik egy kliens, létrehoz neki egy ChatHandler objektumot, közben meg a háttérben szinkronizál az adatbázissal. Meg az sem néz ki jól, hogy ha netbeans profiler-ben futtatom, a memóriafoglalás egyre nő...

/*
 * Adatbazis.java
 */

public class Adatbazis extends Thread {
    ChatServer szerver;
    Statement st1;
    
    private Connection conn;
    
    private ResultSet rs1;
    
    private HallgatoObj hallgato;
    
    private Statement st2;
    
    private ResultSet rs2;
    
    private SzobaObj szoba;
    
    private boolean fakeDb = false;
    
    /** Creates a new instance of Adatbazis */
    public Adatbazis(ChatServer _szerver) {
        szerver = _szerver;
    }
    
    public void run() {
        while(true) {
            System.out.println("Adatbázis...");
            
            /**
             * Nincs a közelben elérhető adatbázis, de tesztelni viszont kell?
             */
            fakeDb = true;
            
            if(fakeDb) {
                hallgato = new HallgatoObj();
                szerver.lehetsegesHallgatokZarolva = true;
                szerver.lehetsegesHallgatok.clear();
                /**
                 * Egy fake gynagy hozzáadása
                 */
                hallgato.beallitAdatok("1", "Nagy", "György", "", "nnnnn", "", "061234356478", "gynagy", "0630485738495", "nagygyorgy at freemail.hu", "t", "t", "t", "t", "t", "t", "t", "t");
                szerver.lehetsegesHallgatok.addElement(hallgato);
                
                /**
                 * Egy fake szoba hozzáadása
                 */
                szerver.lehetsegesSzobakZarolva = true;
                szerver.lehetsegesSzobak.clear();
                    /**
                     * Lehetséges szobák hozzáadása a szerverhez
                     */
                    szoba = new SzobaObj();
                    szoba.beallitAdatok("1", "Próba tanfolyam", "Ez egy próba tanfolyam bla bla...", "1");
                    szerver.lehetsegesSzobak.addElement(szoba);
                    szoba = null;
                    
                } else {ugyanez, csak adatbázisból}
                try {
                    System.out.println("Adatbázis vége...");
                    sleep(10000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
        
    }

/**
* ChatHandler.java
*/
public class ChatHandler extends Thread {
    static Vector handlers = new Vector( 10 );
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    private ChatServer szerver;
    public String sajatNev = "";
    private String elvalaszto;

    private DataOutputStream dout;
    
    public ChatHandler(Socket socket, ChatServer _szerver) throws IOException {
        elvalaszto = _szerver.elvalaszto;
        
        szerver = _szerver;
        System.out.println("Új kapcsolat...");
        this.socket = socket;
        
        dout = new DataOutputStream( socket.getOutputStream() );
        
        in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(
                new OutputStreamWriter(socket.getOutputStream()));
    }
    public int ping() {
        return 1; 
    }
    public void run() {
        String uzenet;
        synchronized(handlers) {
            handlers.addElement(this);
        }
        try {
            while((uzenet = in.readLine())!=null) {
                System.out.println("->" + uzenet);
                if(uzenet.startsWith("/ittvagyok: ")) {
                    sajatNev = uzenet.substring(12);
                    //TODO: ellenőrzés
                    String tmp = "";
                    SzobaObj tmpSzoba = new SzobaObj();
                    for(int i=0; i<szerver.lehetsegesSzobak.size(); i++) {
                        tmpSzoba = (SzobaObj) szerver.lehetsegesSzobak.get(i); 
                        System.out.println(tmpSzoba.tanfolyamNev);
                        tmp +=  tmpSzoba.tanfolyamNev + elvalaszto;
                    }
                    dout.writeUTF("/szobalista: " + tmp);
                    System.out.println(" -szobalista elküldve");
                    tmp = null;
                }
                if(uzenet.equals("/kilepes")) {
                    return;
                }
            }
        } catch(IOException ioe) {
            /**
             * Ha hiba van az azért történik, mert elvágta egy markoló a hálózati kábelt. KHM!
             */
            System.out.println("Megszakadt a kapcsolata...");
        } finally {
            try {
                /**
                 * Rendes kilépés, vagy hiba esetén lezárjuk a kapcsolatot...
                 */
                System.out.println("Kapcsolat lezárása...");
                in.close();
                out.close();
                socket.close();
                szerver.objektumok.remove(this);
            } catch(IOException ioe) {
            } finally {
                synchronized(handlers) {
                    handlers.removeElement(this);
                }
            }
        }
    }
}



/**
 * ChatServer.java
 */
public class ChatServer {
    /**
     * A ChatHandler objektumok vannak benne
     */
    public Vector objektumok = new Vector();
    /**
     * A lehetséges hallgatók (HallgatoObj)
     */
    public Vector lehetsegesHallgatok = new Vector();
    public boolean lehetsegesHallgatokZarolva = false;
    /**
     * A lehetséges szobák (SzobaObj)
     */
    public Vector lehetsegesSzobak = new Vector();
    public boolean lehetsegesSzobakZarolva = false;
    
    String elvalaszto = "###";
    
    public ChatServer() {
        int port = 2000;
        ServerSocket serverSocket = null;
        Socket socket = null;
        new Ping(this).start();
        new Adatbazis(this).start();
        try {
            /**
             * Végtelen ciklusban figyel, és ha valaki kapcsolódik, nyit egy új
             * ChatHandler-t
             */
            serverSocket = new ServerSocket(port);
            while(true) {
                socket = serverSocket.accept();
                ChatHandler handler = new ChatHandler(socket, this);
                handler.start();
                objektumok.addElement(handler);
            }
        } catch(IOException ioe) {
            ioe.printStackTrace();
        } finally {
            try {
                serverSocket.close();
            } catch(IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        new ChatServer();
    }
}

Köszönettel:
Muskovics Gábor
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070615/838c4885/attachment-0001.html 


További információk a(z) Javalist levelezőlistáról