PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Multithreading


Dj-Atzy
2006-12-08, 15:08:05
Hallo,

da war in der schule grad mit java programmieren, hab ich mir grad gedacht, komm schreibst n kleines programm, dass 2 threads benutzt.

Also hab ich mir ne klasse gemacht, die rechnet:


public class CPU1
{

public void rechne()
{
for (int i = 0;i<5000;i++)
{
double zahl1 = Math.random();
double zahl2 = Math.random();
double d = zahl1 / zahl2;
System.out.println(d);
}

}
}

und eine die das threading übernimmt:


public class Threading
{
public void threading(int x)
{
for (int i = 0;i<x;i++)
{
CPU1 cpu_1 = new CPU1();
CPU1 cpu_2 = new CPU1();

cpu_1.rechne();
cpu_2.rechne();
}
}
}


Damit müsste ich doch 2 Threads haben oder verteh ich da was falsch? Hab im internet irgendwie keine brauchbaren tutorials gefunden...

Da ich eine Dualcore CPU hab müsste beide Cores eig. voll ausgelastet sein - sind sie aber nicht. Einer ist zu ca. 85% ausgelastet und der andere ca 20%.

Wo liegt mein Fehler? Hab ich in wirklichkeit garnicht 2 threads oder kann java das garnicht?

Hab übrigens das neue Java 6 JDK drauf und benutze BlueJ.

MFG Atze

RMC
2006-12-08, 15:16:42
Hab ich in wirklichkeit garnicht 2 threads

Rüschtüsch

Das was du gemacht hast wird nacheinander ausgeführt, nicht parallel. Für Threading brauchst du

- Zunächst eine Anwendung die sich für Multithreading auszahlt (einfaches Rechnen reicht nicht weil das so schnell geht dass du Threading nicht mitbekommst - außer du baust eine zufällig generierte Wartezeit ein)
- Die Thread-Klasse von Java


Das solltest du dir mal durchlesen:

http://www.galileocomputing.de/openbook/javainsel5/javainsel09_000.htm#Xxx999378

MadMan2k
2006-12-08, 15:16:53
http://java.sun.com/docs/books/tutorial/essential/concurrency/threads.html

Xmas
2006-12-08, 15:19:13
Und woher soll Java bei deinem Code wissen dass es nun Threads verwenden soll? Für Threads musst du auch die Klasse java.lang.Thread verwenden. Zum Beispiel indem du CPU1 von java.lang.Thread erben lässt und die Methode public void run() implementierst (in deinem Fall einfach rechne() in run() umbenennen). Dann startest du die Threads mit dem Aufruf von cpu_1.start() bzw. cpu_2.start().