Thread I/O test - gehts vlt besser?

  • Thread I/O test - gehts vlt besser?

    Nabend Leute,
    Ich bin neu hier im Board und dachte mir ich veröffentliche als Einstand mal eben einen kleinen Code...
    Ich bin relativ neu im umgang mit Java und habe dieses Prog. als vorarbeit auf einen Server welcher zwischen mehreren
    Clients(Threads) I/O durchführen kann (soll mal ein chatserver werden).
    Ich würde gerne wissen ob dies schon eine relativ gute Lösung ist oder ob ich mich mit meinem halbwissen doch schon zu sehr
    verrannt habe.
    Wer Lust und Zeit hat kanns sich ja mal angucken.

    Über feedback freue ich mich natürlich immer :)

    Quellcode

    1. // Thread IO Example -- by Bakero
    2. // + mehrere Threads, welche ein und die Selbe aufgabe erledigen (zB verb. clients
    3. // abfertigen) starten und deren IO regeln.
    4. package thread_io;
    5. import java.io.*;
    6. public class Thread_io {
    7. public static void main(String[] args)
    8. {
    9. //code für die comm von 2 threads bzw father2child
    10. try
    11. {
    12. PipedInputStream thread1_out = new PipedInputStream();
    13. PipedOutputStream thread1_outt = new PipedOutputStream(thread1_out);
    14. PipedOutputStream thread1_inn = new PipedOutputStream();
    15. PipedInputStream thread1_in = new PipedInputStream(thread1_inn);
    16. //---------------------------------------------------------------------------
    17. //möglichkeit für egal anzahl an threats
    18. int thread_id = 0; //id des ersten threads + current thread
    19. int max_threads = 3; //anzahl der maximal möglichen threads
    20. int counter = 0; //allgemeiner counter
    21. PipedInputStream[] thread_out = new PipedInputStream[max_threads];
    22. PipedOutputStream[] thread_outt = new PipedOutputStream[max_threads];
    23. PipedOutputStream[] thread_inn = new PipedOutputStream[max_threads];
    24. PipedInputStream[] thread_in = new PipedInputStream[max_threads];
    25. //Pipes Conf
    26. while(counter <= (thread_inn.length-1))
    27. {
    28. thread_out[counter] = new PipedInputStream();
    29. thread_outt[counter] = new PipedOutputStream(thread_out[counter]);
    30. thread_inn[counter] = new PipedOutputStream();
    31. thread_in[counter] = new PipedInputStream(thread_inn[counter]);
    32. counter++;
    33. }
    34. counter=0; //counter reset
    35. //--------------------------------------------------------------------------
    36. //Einzelnen thread starten
    37. Thread_1 t1 = new Thread_1(thread1_in,thread1_outt);
    38. //--------------------------------------------------------------------------
    39. // beliebige anzahl eines threads starten welche die gleiche aufgabe lösen
    40. Thread_[] t = new Thread_[max_threads]; //threads initialisieren
    41. while(thread_id <= max_threads-1) //Threads starten
    42. {
    43. t[thread_id] = new Thread_(thread_in[thread_id],thread_outt[thread_id],thread_id);
    44. System.out.println("Starte Thread : " + thread_id);
    45. t[thread_id].start();
    46. thread_id++;
    47. }
    48. //---------------------------------------------------------------------------
    49. //Von allen threads lesen und anschliesend senden
    50. while(true)
    51. {
    52. while(counter <= (max_threads-1))
    53. {
    54. System.out.println("Master:lese" + thread_out[counter].read());
    55. System.out.println("Master:schreibe");
    56. thread_inn[counter].write(0);
    57. //System.out.println("Master:lese von 2" + thread_out[counter].read());
    58. //System.out.println("Master:schreibe an 2");
    59. //thread_inn[counter].write(3);
    60. counter++;
    61. }
    62. counter=0;
    63. }
    64. }
    65. catch(IOException e)
    66. {
    67. System.out.println("I/O ERROR!");
    68. }
    69. //---------------------------------------------------------------------------
    70. }
    71. }
    72. class Thread_1 extends Thread
    73. {
    74. PipedInputStream thread_in = null;
    75. PipedOutputStream thread_out = null;
    76. Thread_1(PipedInputStream thread_in,PipedOutputStream thread_out)
    77. {
    78. this.thread_in=thread_in;
    79. this.thread_out=thread_out;
    80. }
    81. public void run()
    82. {
    83. while(true)
    84. {
    85. try{
    86. System.out.println("Thread:schreibe");
    87. thread_out.write(1);
    88. System.out.println("Thread:lese" + thread_in.read());
    89. }
    90. catch(IOException e)
    91. {
    92. System.out.println("Fehler");
    93. }
    94. }
    95. }
    96. }
    97. class Thread_ extends Thread
    98. {
    99. int thread_id;
    100. PipedInputStream thread_in = null;
    101. PipedOutputStream thread_out = null;
    102. Thread_(PipedInputStream thread_in,PipedOutputStream thread_out,int thread_id)
    103. {
    104. this.thread_id = thread_id;
    105. this.thread_in=thread_in;
    106. this.thread_out=thread_out;
    107. }
    108. public void run()
    109. {
    110. while(true)
    111. {
    112. try{
    113. System.out.println("Thread"+thread_id+":schreibe");
    114. thread_out.write(1);
    115. System.out.println("Thread:habe geschrieben");
    116. System.out.println("Thread:lese" + thread_in.read());
    117. }
    118. catch(IOException e)
    119. {
    120. System.out.println("Fehler");
    121. }
    122. //catch(NullPointerException b)
    123. //{
    124. // System.out.println("I/O ERROR");
    125. //}
    126. }
    127. }
    128. }
    Alles anzeigen