Configurare mediu de lucru
1. Setare mediului Java

Veti folosi compilatorul Java javac pentru a compila programele dumneavoastra Java si interpretorul java pentru a le rula.
Java este deja instalata si mediul Java este configurat pe masina dumneavoastra.
Daca nu a fost configurata corect calea catre binarele Java, va trebui sa o configurati chiar dumneavoastra.
Pentru aceasta, in Windows XP, selectati [Start -> My Computer -> Properties -> Advanced -> Environment Variables -> System variables -> PATH.]
Adaugati calea catre Java JDK instalat pe masina dumneavoastra la inceputul variabilei PATH: de exemplu, daca versiunea de JDK este 1.6.0_37, atunci adaugati la PATH:
C:\Program Files\Java\jdk1.6.0_27\bin;
Apasati apoi OK de trei ori.


2. Porniti o consola Command Prompt

Pentru a porni o consola, selectati [Start -> Run... ] si tastati "cmd" in text box-ul care apare. Se va lansa o consola alfanumerica.
Daca aveati deja una deschisa, inchideti-o si porniti alta (pentru a va asigura ca la calea - PATH - deja existenta s-a adaugat calea configurata mai sus).

Pentru a verifica versiunea de java existenta, tastati urmatoarea comanda la consola:

C:\Documents and Settings\username>java -version

Rezultatul trebuie sa fie ceva asemanator:

java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)

Daca primele doua numere sunt 1.6 totul este in regula, versiunea minora nu este foarte importanta.

Pentru a verifica daca puteti folosi compilatorul java, tastati:

C:\Documents and Settings\username>javac -version

Rezultatul trebuie sa fie ceva asemanator:

javac 1.6.0_37


3. Compilarea programului

Schimbati directorul curent cu directorul in care ati salvat sursele dumneavoastra Java pentru programul pe care doriti sa il compilati
De exemplu, daca acest director este: "C:\Documents and Settings\username\workspace\SynchronizedThread", tastati comanda:

C:\Documents and Settings\username>cd C:\Documents and Settings\username\workspace\SynchronizedThread

In directorul in care aveti sursele, tastati comanda pentru compilare; daca sursa dumneavoastra se numeste SynchronizedThread.java, atunci comanda va fi:

C:\Documents and Settings\username\workspace\SynchronizedThread>javac SynchronizedThread.java

Daca  sunt mai multe clase de compilat in acelasi director, tastati repetat comanda, pentru fiecare clasa in parte; sa presupunem, in acest exemplu, ca avem inca
o clasa, care contine si "main": SynchronizedThreadTest.java

C:\Documents and Settings\username\workspace\SynchronizedThread>javac SynchronizedThreadTest.java

La fiecare rulare, daca nu este nici o eroare de compilare, se va adauga un fisier cu extensia *.class
Dupa aceste doua compilari, vor aparea doua fisiere: SynchronizedThreadTest.class si SynchronizedThread.class

4. Executia programului

Pentru a executa programul (se poate/pot executa doar acea clasa/acele clase care au definit un 'main' ), tastati:

C:\Documents and Settings\username\workspace\SynchronizedThread>java SynchronizedThreadTest

5. Troubleshooting

5.1. Cand tastez "java -version" am o eroare.
Cel mai probabil, calea catre Java nu a fost scrisa corect. Verificati calea catre Java; verificati ca versiunea instalata corespunde celei din cale.

5.2. Comanda "java -version" functioneaza, dar nu si "javac -version".
Cel mai probabil e o problema legata de cale (PATH). Incercati sugestiile de la prima intrebare. Verificati si daca Java a fost instalata corect,
verificand existenta directorului: C:\Program Files\Java\jdk1.6.0_27\bin

5.3. Cum pot sa verific valorile din variabila mea PATH ?
Tastati comanda urmatoare in consola:

C:\Documents and Settings\username>echo %PATH%

5.4. Pot compila cu javac, dar am eroarea de tipul: "Exception in thread "main" java.lang.NoClassDefFoundError: SynchronizedThreadTest"  cand incerc sa
execut cu java.
Mai intai, asigurati-va ca SynchronizedThreadTest.class este prezenta in directorul curent. Asigurati-va ca ati tastat SynchronizedThreadTest fara sa
adaugati .java sau .class. Verificati daca si comanda "java -version" merge. Incercati sa tastati:

C:\Documents and Settings\username\workspace\SynchronizedThread>java -cp . SynchronizedThreadTest

Daca aceasta merge, va trebui sa editati corect CLASSPATH
Adaugati la CLASSPATH si ., la inceputul stringului.
Pentru a verifica valoarea CLASSPATH, tastati:

C:\Documents and Settings\username>echo %CLASSPATH%

Aplicatii cu fire de executie
Salvati urmatoarele secvente de cod in fisiere separate, grupate indirectoare separate,
compilati si executati programele, urmand procedura descrisa mai sus

De exemplu, pentru Exemplul 1 (Ex. 1), salvati secventa de cod prefatata de SimpleThread.java in fisierul
SimpleThread.java, intr-un director SimpleThread din directorul dumneavoastra curent; salvati apoi secventa
de cod prefatata de de TestTwoThreads.java in fisierul TestTwoThreads.java, itot in directorul SimpleThread
Compilati apoi pe rand cele doua fisiere java si executati programul de test:

C:/Users/username/SimpleThread>java -cp . SimpleThread

Ex.1: Simple thread

File: SimpleThread.java
public class SimpleThread extends Thread {
	public SimpleThread (String str) {
		super(str);
	}

	public void run() {
		for (int i = 0; i < 30; i++) {
			System.out.println(i + " " + getName());

		//	try {
				//System.out.println(i + " I do not sleep" + getName());
			 //sleep((int)Math.random() * 1000);
			//} catch(InterruptedException e) {}
		}
		System.out.println("DONE! " + getName());
	}
}
File: TestTwoThreads.java

public class TestTwoThreads {

	public static void main(String args[]){
		new SimpleThread("Bucharest").start();
		new SimpleThread("London").start();
		new SimpleThread("Paris").start();
		new SimpleThread("Warshaw").start();

		System.out.println("DONE MAIN!");

	}
}

Ex.2: Syncronized Thread

File: SyncronizedThread.java
public class SyncronizedThread extends Thread {

	static int a = 0;
	static int b = 0;
	static Object obj = new Object();

	SyncronizedThread(String name){
		super(name);
	}
	void method() {
		System.out.println(getName() + "  a = " + a + " b = " + b);
		a++;
		try {
			sleep((int) (Math.random() * 1000));
		}
		catch(InterruptedException e)
		{

		}
		b++;
	}
	public void run() {
		for (int i = 0; i < 3; i++) {
			synchronized(obj) {
				method();
			}
		}
		System.out.println(getName() + "DONE!");
	}
}
File: SyncronizedThread.java
public class SyncronizedThreadTest {
	public static void main (String args[]){
		new SyncronizedThread("Thread 1: ").start();
		new SyncronizedThread("Thread 2: ").start();
		new SyncronizedThread("Thread 3: ").start();
		System.out.println("Main test DONE!");
	}
}