12
06/04/2015 1 CONCURRENCIA Por: M. en C. C. Irving Alejandro González Manríquez THREADS (HILOS) Una visión simple de una computadora es que contiene: CPU : realizar procesamientos. Memoria para almacenar el programa que el CPU esta ejecutando. Memoria para almacenar los datos con los que el programa opera.

Programacion Paralela y Distribuida - Concurrencia

Embed Size (px)

DESCRIPTION

Programacion paralela y distribuida, concurrencia

Citation preview

06/04/2015

1

C O N C U R R E N C I A

Por: M. en C. C. Irving Alejandro González Manríquez

THREADS (HILOS)

Una visión simple de una computadora es que contiene:

• CPU : realizar procesamientos.

• Memoria para almacenar el programa que el CPU esta

ejecutando.

• Memoria para almacenar los datos con los que el

programa opera.

06/04/2015

2

THREADS (HILOS)

Programas de ejecución de flujo único

Programas de ejecución de flujo paralelo.

THREADS (HILOS)

Thread: proceso individual que se ejecuta dentro del

sistema.

Sus partes principales son:

• CPU virtual

• Código a ser ejecutado por el CPU

• Datos con los que trabaja el código.

06/04/2015

3

THREADS (HILOS)

Un hilo es una encapsulación de:

THREADS (HILOS)

Ejecución multitarea

06/04/2015

4

THREADS (HILOS)

El paquete java.lang incluye:

• Clase Thread

• Interfaz Runnable

THREADS (HILOS)

Para la creación y ejecución de hilos es necesario:

Sobrescribir el método run() el cual proporciona la base

para la definición de las tareas, de modo que el

código asociado a cada una de ellas tendrá que estar

definido en el interior de este método.

06/04/2015

5

• Ejecución multitarea

THREADS (HILOS)

public class Principal{

public static void main(String []args){

Tarea1 t1 = new Tarea1(); //El hilo pasa a estado “nuevo”

Tarea2 t2 = new Tarea2();

t1.start(); //El hilo pasa a estado “preparado”

t2.start();

}

06/04/2015

6

THREADS (HILOS) – IMPLEMENTACIÓN DE RUNNABLE

class HelloRunner implements Runnable{

int i;

public void run(){

i=0;

while(true){

System.out.println("Hello "+i++);

if(i==50){ break; }

}

}

}

THREADS (HILOS)

public class ThreadTester{

public static void main(String args[]){

HelloRunner r = new HelloRunner();

Thread t1 = new Thread(r);

Thread t2 = new Thread(r);

t1.start();

t2.start();

}

}

06/04/2015

7

THREADS (HILOS)

Cada instancia de HelloRunner es una encapsulación

THREADS (HILOS) - SCHEDULING

En java varios hilos pueden estar listos para ejecución

pero solo uno estarse ejecutando. El hilo se ejecuta

hasta que “muere” u otro hilo de mayor prioridad se

convierte en ejecutable.

06/04/2015

8

THREADS (HILOS) - ESTADOS

THREADS (HILOS) - ESTADOS

Nuevo

Preparado

Ejecución

Esperando/bloqueado/dormido.

Finalizado.

06/04/2015

9

THREADS (HILOS) – METODO SLEEP

Metodo estático de la clase Thread

Invocación: Thread.sleep(x);

La ejecución del hilo no se reanuda hasta que el periodo

marcado por x se cumpla. (la JVM es la que decide en

que momento se reanuda la ejecución.)

La llamada al método sleep() puede generar un

excepción del tipo InterruptedException

Threads (hilos) – implementacion de sleep

06/04/2015

10

THREADS (HILOS) – ESTABLECER NOMBRE

La clase Thread dispone de métodos para establecer y

obtener el nombre a un hilo:

• public Thread(String nombre)

• public void setName(String nombre)

• public String getName()

THREADS (HILOS)-OBTENER HILO EN EJECUCIÓN

La clase Thread dispone del método estático

currentThread() que permite obtener una referencia al

Thread que se encuentre en ejecución.

06/04/2015

11

public class ExecuteThread extends Thread{

public ExecuteThread(String name) {

super(name);

}

public ExecuteThread() {

}

public void run(){

for(int i=1; i<=10; i++){

System.out.println("nombre:

"+Thread.currentThread().getName());

try{

Thread.sleep(1000);

}catch(InterruptedException ex){

System.out.println("Thread se interrumpio");

}

}

}

}

06/04/2015

12

public class TestCurrentThread {

public static void main(String[] args) {

ExecuteThread t1 = new ExecuteThread("juan");

ExecuteThread t2 = new ExecuteThread();

t2.setName("pepe");

t1.start();

t2.start();

}

}