Zugriff auf statische Methode durch mehrere User

Status
Nicht offen für weitere Antworten.

Heiko

Bekanntes Mitglied
Wie funktioniert es, dass ich in einem Programm eine statische Methode habe und mehrer User darauf zugreifen können.
Ich dachte statische Methoden sind fest adressiert und nur Objekte werden vielfach erzeugt (=bei jeden Aufruf).

Ich würde mich über eine ergebnisreiche Diskussion freuen.

Vielen Dank

Gruß

Heiko

Editiert von P3AC3MAK3R: Titel präzisiert
 

Heiko

Bekanntes Mitglied
Das funktioniert schon so, wie ich es geschrieben habe, aber ich würde gerne wissen, wieso es so funktioniert.

Die User sind weltweit verteilt und keiner weiß wer wann zugreift, aber es geht.
 

meez

Top Contributor
???
Verteilt auf der Welt???
Du kannst Methoden so nur via RMI/Corba oder so aufrufen...
 

Heiko

Bekanntes Mitglied
Es funktioniert ja schon.

Aber ich möchte wissen WARUM es funktioniert.

Versteht mich bitte nicht falsch!
 

Heiko

Bekanntes Mitglied
Ich versuchs nochmal zu erklären:

Wir haben eine Anwendung, die mehrere Threads aufruft.
Diese Threads rufen unabhängig voneinander eine statische Methode auf.

Warum funktioniert das?
 
B

bygones

Gast
Heiko hat gesagt.:
Ich versuchs nochmal zu erklären:
Wir haben eine Anwendung, die mehrere Threads aufruft.
Diese Threads rufen unabhängig voneinander eine statische Methode auf.
???:L warum sollte das nicht funktionieren... eine statische Methode ist eine Methode und die kann man aufrufen.... warum sollte das nicht gehen wenn sie statisch ist....
 

Heiko

Bekanntes Mitglied
Und woher weiß jeder Thread an welcher Stelle der Methode er gerade ist?

Gibt es da einen Pointer?
 
B

bygones

Gast
Heiko hat gesagt.:
Und woher weiß jeder Thread an welcher Stelle der Methode er gerade ist?
*NochMehrGrübel* hä ??

warum sollte ein Thread wissen wollen wo er gerade in einer Methode ist - die Methode wird aufgerufen und dann sukzessiv abgearbeitet....

sorry - aber ich verstehe wirklich nicht warum diese Frage v.a. hä ?
 

Isaac

Bekanntes Mitglied
Das kommt auf die Methode an. Wenn z.b. in einer statischen Methode ganz oben ein Wert i inkrementiert wird und ganz unten der Ausgang der Methode durch i beeinflusst wird ist die Methode in der Regel ohne weiteren Schutz nicht reentrance fähig. Soll heissen, wenn 2 threads gleichzeitig oder eben zeitlich so versetzt in die Methode reingehen das i vom zweiten Thread inkrementiert wird und dadurch Thread 1 beeinflusst wird.
Entweder man sichert die Methoden durch entsprechende Massnahmen oder man verzichtet auf solche Abhängigkeiten. Beides führt zum Ziel.


Wenn deine Methode reentrance fähig ist oder auf diese Abhängigkeiten verzichtet besteht kein Grund wieso nicht verschiedene Threads drin rumhühnern können sollten.
 

meez

Top Contributor
Ach, mehrere Threads....Das sind KEINE User...Das sind andere Methoden, die deine statische Methode in der selben VM aufrufen...!!!
 

Heiko

Bekanntes Mitglied
Isaac hat gesagt.:
Das kommt auf die Methode an. Wenn z.b. in einer statischen Methode ganz oben ein Wert i inkrementiert wird und ganz unten der Ausgang der Methode durch i beeinflusst wird ist die Methode in der Regel ohne weiteren Schutz nicht reentrance fähig. Soll heissen, wenn 2 threads gleichzeitig oder eben zeitlich so versetzt in die Methode reingehen das i vom zweiten Thread inkrementiert wird und dadurch Thread 1 beeinflusst wird.
Entweder man sichert die Methoden durch entsprechende Massnahmen oder man verzichtet auf solche Abhängigkeiten. Beides führt zum Ziel.


Wenn deine Methode reentrance fähig ist oder auf diese Abhängigkeiten verzichtet besteht kein Grund wieso nicht verschiedene Threads drin rumhühnern können sollten.

Muss dann der Wert i auch statisch sein?
Denn wenn der Wert i nicht statisch ist, wieso sollte da ein Problem sein?
 

Stefan1200

Top Contributor
Es geht um was völlig anderes. Stelle dir mal vor, das 10 "User" (richtig: Threads) gleichzeitig auf die Variable i zugreifen und um einen Wert erhöhen. Und jeder User (Thread) verwendet dann den Wert der Variable i, dann ist dieser ja nicht nur um den Wert 1 größer, sondern um den Wert 10, was du ja sicherlich nicht willst.

Falls ich jetzt auch durcheinander bin, möge man mich versuchen zu verstehen ;-) *g*
 

Isaac

Bekanntes Mitglied
Stell dir folgende Methode vor

Code:
public static int Foo()
{
    int i = 0;
    i++; <- Position Thread 2
    //irgendein code der ziemlich lange brauch
    //noch mehr code der was mit i macht
    //und noch mehr code der was mit i macht
    //und noch viel mehr code der was mit i macht
    return i; <- Position Thread 1
}

Plötzlich gibt Thread 1 etwas zurück das Thread 2 verursacht hat, böse Falle. Aber wie ich schon sagte kann man das programmtechnisch verhindern. Dies wird wohl bei der methode von dir der Fall sein. Denn sonst würde es ja nicht funktionieren.
 

Heiko

Bekanntes Mitglied
Isaac hat gesagt.:
Stell dir folgende Methode vor

Code:
public static int Foo()
{
    int i = 0;
    i++; <- Position Thread 2
    //irgendein code der ziemlich lange brauch
    //noch mehr code der was mit i macht
    //und noch mehr code der was mit i macht
    //und noch viel mehr code der was mit i macht
    return i; <- Position Thread 1
}

Plötzlich gibt Thread 1 etwas zurück das Thread 2 verursacht hat, böse Falle. Aber wie ich schon sagte kann man das programmtechnisch verhindern. Dies wird wohl bei der methode von dir der Fall sein. Denn sonst würde es ja nicht funktionieren.

Aber die Variablen sind doch nicht statisch, von daher müsste doch jeder Thread die Variablen neu erstellen, oder bin ich falsch?
 
B

Beni

Gast
Das siehst du richtig, Isaac wollte wohl sowas sagen:

Code:
public class A{
  private static int i = 0;

  public static int foo(){
    i++;
    // blabla
    return i;
  }
}

(Das Problem kann man mit einem "synchronized" lösen: public static synchronized int...)
 

Heiko

Bekanntes Mitglied
Ich weiß ja nicht ob wir hier falsch liegen, oder du mit dem i.

Aber bei unserm kleinen Testprogramm (siehe Coding) ist jedes i in jedem Thread neu definiert.

Code:
package testprogramme;

/**
 * @author schuess3
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class ThreadAufruf
{

 public static void main(String[] args)
 {
  for (int i = 1; i < 30; i++)
  {
  ThreadKlasse  ta = new ThreadKlasse(i);
  System.out.println("Start: "+i); 
  ta.start();
  }
 }
}

Code:
package testprogramme;

/**
 * @author schuess3
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class ThreadKlasse extends Thread
{
 int nummer = 0;
 public ThreadKlasse(int nummer)
 {
  this.nummer = nummer;
 }
 public void run()
 {
  try
  {
   sleep(1000);
   System.out.println("antwort für Thead " + nummer + ": " + ThreadStatic.veraendere(nummer));
  } catch (InterruptedException e)
  {
  }
 }

}

Code:
package testprogramme;

/**
 * @author schuess3
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class ThreadStatic
{
 public static int veraendere(int x)
 {
  try
  {
   System.out.println(x);
   int i = 0;
   Thread.sleep(50);
   System.out.println(x);
   i = 1*x;
   Thread.sleep(50);
   System.out.println(x);
   return (i * x);
  } catch (InterruptedException e)
  {
  }
  return -1;
 }

}

Editiert von P3AC3MAK3R: Tags repariert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Paralleler Zugriff auf statische Methode Allgemeine Java-Themen 5
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Java Zugriff auf Netzwerklaufwerk Allgemeine Java-Themen 1
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
O Zugriff auf mySQL ohne JDBC Allgemeine Java-Themen 3
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
W Zugriff auf Objektvariablen vs. Übergabe Allgemeine Java-Themen 3
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
Tommy Nightmare HTTP Zugriff auf Internetseite im Loginbereich Allgemeine Java-Themen 5
H Zugriff auf PHP Allgemeine Java-Themen 4
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
O JNA Zugriff auf Funktion aus DLL Allgemeine Java-Themen 0
O Zugriff auf Windows Zertifikatstore Allgemeine Java-Themen 2
M Kein Zugriff auf microSD Karten Allgemeine Java-Themen 4
T Zugriff auf Datenbank Allgemeine Java-Themen 1
J Zugriff auf IMAP GMail Konto scheitert. Allgemeine Java-Themen 2
P Frontend- Zugriff auf WS- Backend Allgemeine Java-Themen 0
U Zugriff auf Datei sperren Allgemeine Java-Themen 5
N Best Practice Semi-Synchronized Zugriff Allgemeine Java-Themen 0
C Zugriff auf Event felder Allgemeine Java-Themen 0
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
F Zugriff Verweigert bei Kopieroperation? Allgemeine Java-Themen 4
T JNI: kein Zugriff auf VM in Callback-Methode eines Windows-Hooks Allgemeine Java-Themen 3
S Dynamischer Zugriff Allgemeine Java-Themen 4
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
V Zugriff auf den Objekterzeuger? Allgemeine Java-Themen 4
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B JApplet Zugriff auf Local Storage des Browser? Allgemeine Java-Themen 2
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
M gleichzeitiger Zugriff auf eine Textdatei Allgemeine Java-Themen 6
D Eclipse Kein Zugriff auf Inhalt einer referenzierten .jar Allgemeine Java-Themen 5
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
J XML Element Zugriff Allgemeine Java-Themen 4
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
M Klassen Zugriff auf getMethode ohne Klasse zu erzeugen Allgemeine Java-Themen 6
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
H Vererbung Abgeleitete Klassen und Zugriff Allgemeine Java-Themen 2
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
S Zugriff auf innere Klasse Allgemeine Java-Themen 3
D Kein Zugriff auf WebService ausser localhost Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
J Zugriff auf Dateien auf einem shared Folder? Allgemeine Java-Themen 3
H Zugriff auf VBA in Java Allgemeine Java-Themen 2
Haave Audio Device Unavailable: Kein gleichzeitiger Zugriff auf Soundsystem möglich Allgemeine Java-Themen 7
G Letzter Zugriff auf Datei Allgemeine Java-Themen 5
C java.io.FileNotFoundException: (Zugriff verweigert) Allgemeine Java-Themen 14
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
C Webstart: Zugriff auf lokale Dateien? Allgemeine Java-Themen 2
X Zugriff auf ComboBoxen in Hauptklasse von zweiter Klasse aus Allgemeine Java-Themen 8
J Zugriff auf gemeinsame Funktionen Allgemeine Java-Themen 4
Airwolf89 Zugriff auf ArrayList<ArrayList> Allgemeine Java-Themen 3
Airwolf89 Zugriff auf Werte in ArrayList<ArrayList> Allgemeine Java-Themen 4
T Zugriff zwischen Klassen für repaint Allgemeine Java-Themen 7
N Zugriff auf eine Referenzvar. Allgemeine Java-Themen 3
S Zugriff auf Klasse Allgemeine Java-Themen 4
Meldanor Mehrdimensionale Arrays : Zugriff auf n-tes Array Allgemeine Java-Themen 5
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
L Zugriff auf ein Objekt mit mehreren Threads Allgemeine Java-Themen 11
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
S Zugriff auf einzelne Bildpunkte Allgemeine Java-Themen 3
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
V Zugriff auf Default-Package? Allgemeine Java-Themen 6
P RegeEx-Problem: Zugriff auf group Allgemeine Java-Themen 2
M Zugriff auf Parallel-Schnittstelle Allgemeine Java-Themen 2
B Zugriff mit einem Applet auf den Datenträger Allgemeine Java-Themen 11
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
I Zugriff auf Daten Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
D Zugriff auf Windows Dienste Allgemeine Java-Themen 7
G Zugriff auf Memberclasses einer geladenen Class-Datei Allgemeine Java-Themen 2
I Gleichzeitiger zugriff auf ein Long über Threads Allgemeine Java-Themen 2
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
J Kein Zugriff auf Klassen im Default Package Allgemeine Java-Themen 8
S Zugriff auf unterschiedliche JREs Allgemeine Java-Themen 7
M "Unzulässiger Zugriff auf einen Speicherbereich" Allgemeine Java-Themen 7
A Zugriff auf Parallelport nur über Eclipse nicht über .jar ! Allgemeine Java-Themen 12
G Zugriff auf ein sama share Allgemeine Java-Themen 8
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
D eclipse: Zugriff auf Ordner per code Allgemeine Java-Themen 4
O Konkurrierender Zugriff auf Log-Datei mit Log4J Allgemeine Java-Themen 11
Caracasa [Threads] Gleichzeitiger Zugriff auf eine LinkedList Allgemeine Java-Themen 9
L Zugriff auf Objekt das sich in einer Liste befindet Allgemeine Java-Themen 2
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Zugriff auf Map in anderer Klasse Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben