Documente Academic
Documente Profesional
Documente Cultură
Limbajul Java suportă nativ noțiunea de fir de execuție (thread), adică mai multe clase ce
rulează în paralel, dar care fac parte din aceeași aplicație. Există două moduri de
implementare al unui fir de execuție:
Clasa Thread ca și interfața Runnable definesc o metodă numită run(). Această metodă este
metoda de start pentru thread-ul nou, analog metodei public static void main(String[]) pentru
thread-ul principal. Această metodă run() poate fi apelată în două moduri:
apelând direct metoda run(), în care caz execuția se face ca un apel obișnuit de
metodă;
apelând metoda start(), care pornește un thread nou care va începe execuția cu metoda
run().
Clasele și interfețele necesare utilizării firelor de executare în limbajul Java sunt incluse în
pachetul java.lang.Thread.
Exemple:
Atenție, pentru lansarea unui fir de executare, indiferent de modalitatea în care acesta a fost
creat, trebuie apelată metoda start(), care mai întâi va crea contextul necesar unui nou fir
de executare (stiva proprie, setul de regiștrii etc.) și apoi va executa metoda run() în cadrul
noului fir. Dacă am apela direct metoda run(), atunci aceasta ar fi executată ca o metodă
obișnuită, în cadrul firului curent!
Exemplu 1
Clasa FirDeExecutare utilizează un fir de executare pentru a afișa pe ecran de 10 de ori
un caracter c primit prin intermediul constructorului clasei:
public FirDeExecutare(char c)
{
this.c = c;
}
@Override
public void run()
{
for(int i = 0; i < 10; i++)
System.out.print(c + " ");
}
}
În clasa Test_Thread vom lansa în executare două fire, unul care va afișa cifra 1 și unul
care va afișa cifra 2, iar în metoda main(), după lansarea celor două fire, vom afișa de 10
ori cifra 0:
fir_1.start();
fir_2.start();
// fir_1.run();
// fir_2.run();
for(int i = 0; i < 10; i++)
System.out.print("0 ");
System.out.println();
}
}
Rulând programul de mai sus de mai multe ori, pe ecran se vor afișa diverse combinații
aleatorii formate din cifrele 0, 1 și 2, în care fiecare cifră apare de exact 10 de ori.
Practic, în acest program sunt executate concurent 3 fire (fir_1, fir_2 și firul principal -
cel asociat metodei main()), pe care planificatorul le execută într-un mod aleatoriu, astfel:
fiecare fir este executat o perioadă de timp, după care el este suspendat și se trece la
executarea altui fir, până când toate cele 3 fire își vor încheia executarea.
Exemplu 2
import java.awt.*;
public class AlternareCulori extends java.applet.Applet implements Runnable {
Font f=new Font("TimesRoman",Font.BOLD,30);
Color culori[]=new Color[50];
Thread executabil;
public void start() {
if (executabil==null) {
executabil=new Thread(this);
executabil.start();
}
}
public void stop() {
executabil=null;
}
public void run() {
float c=0;
for (int i=0;i<culori.length;i++) {
culori[i]=Color.getHSBColor(c,(float)1.0,(float)1.0);
c+=.02;
}
int i=0;
Thread firExecutie=Thread.currentThread();
while (executabil==firExecutie) {
setForeground(culori[i]);
repaint();
i++;
try {
Thread.sleep(200);
} catch (InterruptedException e) {}
if (i==culori.length) i=0;
}
}
public void paint(Graphics ecran) {
ecran.setFont(f);
ecran.drawString("Priviti textul!",10,50);
ecran.drawString("Culoarea se modifica!",10,80);
}
}
import java.awt.*;
import java.util.*;
public class CeasDigital extends java.applet.Applet implements Runnable {
Font fontul=new Font ("TimesRoman",Font.BOLD,24);
Date data;
Thread executabil;
public void start() {
if (executabil==null) {
executabil=new Thread(this);
executabil.start();
}
}
public void stop() {
if (executabil!=null) {
executabil=null;
}
}
public void run() {
Thread firExecutie=Thread.currentThread();
while (executabil==firExecutie) {
repaint();
try{
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
import java.awt.TextField;
public class texts extends java.applet.Applet
{
public void init ()
{
add (new TextField());
add (new TextField (25));
add (new TextField ("Empty String"));
add (new TextField ("Empty String", 40));
}}
import java.awt.*;
public class Lista_derulanta extends java.applet.Applet {
List lista=new List(4,true);
Label eticheta=new Label("Selectati limbajele de programare cunoscute: ");
public void init() {
add(eticheta);
lista.add("C++");
lista.add("C#");
lista.add("Java");
lista.add("Phpt");
lista.add("Pyton");
lista.add("Visual Basic");
add(lista); } }
import java.awt.*;
import java.applet.*;
public class RadioButtonTest extends Applet
{
public void init( )
{
CheckboxGroup chkgrp = new CheckboxGroup ( );
Checkbox chkRed,chkBlue,chkYellow,chkGreen,chkOrange;
add(chkRed);
add(chkBlue);
add(chkYellow);
add(chkGreen);
add(chkOrange);
}
}
import java.applet.Applet;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Graphics;
import java.awt.event.*;
public class RadioButtonEx extends Applet implements ItemListener{
CheckboxGroup gr = null;
public void init(){
//create group
gr = new CheckboxGroup();
SUPRAFETE DE DESENARE
import java.awt.*;
public class Canvas extends java.applet.Applet {
GridLayout admin=new GridLayout(1,1);
canvasNou suprafata=new canvasNou();
public void init() {
setLayout(admin);
add(suprafata);
}
}
class canvasNou extends java.awt.Canvas {
public void paint(Graphics ecran) {
int x=getSize().width/2;
int y=getSize().height/2;
System.out.println("x = "+x);
System.out.println("y = "+y);
ecran.setColor(Color.blue);
ecran.drawLine(x-10,y,x-2,y);
ecran.setColor(Color.red);
ecran.drawLine(x+10,y,x+2,y);
ecran.setColor(Color.green);
ecran.drawLine(x,y-10,x,y-2);
ecran.setColor(Color.magenta);
ecran.drawLine(x,y+10,x,y+2);
}
}
Aplicatie - Lab_7_LoterieNumar
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.temporal.ChronoUnit;
setLayout(new GridLayout(15,1));
setBackground(Color.ORANGE);
setSize(600,600);
intrare.addActionListener(this);
continuare.addActionListener(this);
}
if (e.getSource()==continuare) {
numarAleator = (int)(20*Math.random()+1);
continuare.setEnabled(false);
intrare.setEnabled(true);
label3.setText("");
label4.setText("");
label5.setText("");
label6.setText("");
label7.setText("");
label8.setText("");
incercari = 5;
clear();
repaint();
}
if(e.getSource()==intrare) {
if (numarAleator>numarPropus) {
label4.setText("Introduceti un numar mai mare decat " + numarPropus + " !");
numarIncercari();
intrare.requestFocus();
intrare.selectAll();
}
else if (numarAleator<numarPropus) {
label4.setText("Introduceti un numar mai mic decat " + numarPropus + " !");
numarIncercari();
intrare.requestFocus();
intrare.selectAll(); }
else {