Está en la página 1de 31

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS


ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 1

INFORME DE LABORATORIO

INFORMACIÓN BÁSICA
ASIGNATURA: Laboratorio de Sistemas Operativos - C
TÍTULO DE LA
Threads en Java
PRÁCTICA:
NÚMERO DE NRO.
10 AÑO LECTIVO: 2023 VI
PRÁCTICA: SEMESTRE:
FECHA DE HORA DE
13/11/2023
PRESENTACIÓN PRESENTACION
ALUMNO:
Llaique Chullunquia Angie Carolina NOTA:

DOCENTE(s):
Apaza Aceituno Roni Guillermo

SOLUCIÓN Y RESULTADOS
I. EJERCICIOS RESUELTOS POR EL DOCENTE

Ejercicio 1.
Implementar un thread usando java, guardar el programa con el nombre de ThreadEjemplo.java:
public class ThreadEjemplo extends Thread {
public ThreadEjemplo(String str) {
super(str);
}
public void run() {
for (int i = 0; i < 10 ; i++)
System.out.println(i + " " + getName());
System.out.println("Termina thread " + getName());
}
public static void main (String [] args) {
new ThreadEjemplo("Pepe").start();
new ThreadEjemplo("Juan").start();
System.out.println("Termina thread main");
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac ThreadEjemplo.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 2
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 3

Ejercicio 2.
Implementar un thread usando java, guardar el programa con el nombre de ThreadEjemplo2.java:
public class ThreadEjemplo2 implements Runnable {
public void run() {
for (int i = 0; i < 5 ; i++)
System.out.println(i + " " +
Thread.currentThread().getName());
System.out.println("Termina thread " +
Thread.currentThread().getName());
}
public static void main (String [] args) {
new Thread (new ThreadEjemplo2(), "Pepe").start();
new Thread (new ThreadEjemplo2(), "Juan").start();
System.out.println("Termina thread main");
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac ThreadEjemplo2.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 4

Ejercicio 3.
Implementar dos thread usando java, guardar el programa con el nombre de MostrarCeroUnoHilo.java:
public class MostrarCeroUnoHilo {
public static void main(String[] args) {
HiloMostrarCero h1 = new HiloMostrarCero();
h1.start();
HiloMostrarUno h2 = new HiloMostrarUno();
h2.start();
}
}
class HiloMostrarCero extends Thread {
@Override
public void run() {
for (int f = 1; f <= 1000; f++)
System.out.print("0-");
}
}
class HiloMostrarUno extends Thread {
@Override
public void run() {
for (int f = 1; f <= 1000; f++)
System.out.print("1-");
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac MostrarCeroUnoHilo.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 5

Ejercicio 4.
Implementar dos thread usando java, guardar el programa con el nombre de MostrarCeroUnoHilo2.java:
public class MostrarCeroUnoHilo2 {
public static void main(String[] args) {
HiloMostrarCero h1 = new HiloMostrarCero();
HiloMostrarUno h2 = new HiloMostrarUno();
}
}
class HiloMostrarCero implements Runnable {
private Thread t;
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 6

public HiloMostrarCero() {
t = new Thread(this);
t.start();
}
@Override
public void run() {
for (int f = 1; f <= 1000; f++)
System.out.print("0-");
}
}
class HiloMostrarUno implements Runnable {
private Thread t;
public HiloMostrarUno() {
t = new Thread(this);
t.start();
}
@Override
public void run() {
for (int f = 1; f <= 1000; f++)
System.out.print("1-");
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac MostrarCeroUnoHilo2.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 7
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 8

Ejercicio 5.
Implementar dos thread usando java, guardar el programa con el nombre de java1002.java:
class java1002 {
static public void main( String args[] ) {
// Se instancian dos nuevos objetos Thread
Thread hiloA = new Thread( new MiHilo(),"hiloA" );
Thread hiloB = new Thread( new MiHilo(),"hiloB" );
// Se arrancan los dos hilos, para que comiencen su ejecución
hiloA.start();
hiloB.start();

// Aquí se retrasa la ejecución un segundo y se captura la


// posible excepción que genera el método, aunque no se hace
// nada en el caso de que se produzca
try {
Thread.currentThread().sleep( 1000 );
}catch( InterruptedException e ){}
// Presenta información acerca del Thread o hilo principal
// del programa
System.out.println( Thread.currentThread() );
// Se detiene la ejecución de los dos hilos
hiloA.stop();
hiloB.stop();
}
}
class MiHilo extends Thread {
public void run() {
// Presenta en pantalla información sobre este hilo en particular
System.out.println( Thread.currentThread() );
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac java1002.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 9

Ejercicio 6.
Implementar dos thread usando java, guardar el programa con el nombre de java1003.java:
class java1003 {
static public void main( String args[] ) {
// Se instancian dos nuevos objetos Thread
Thread hiloA = new MiHilo();
Thread hiloB = new MiHilo();
// Se arrancan los dos hilos, para que comiencen su ejecución
hiloA.start();
hiloB.start();
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 10

// Aquí se retrasa la ejecución un segundo y se captura la


// posible excepción que genera el método, aunque no se hace
// nada en el caso de que se produzca
try {
Thread.currentThread().sleep( 1000 );
}catch( InterruptedException e ){}
// Presenta información acerca del Thread o hilo principal
// del programa
System.out.println( Thread.currentThread() );
// Se detiene la ejecución de los dos hilos
hiloA.stop();
hiloB.stop();
}
}
class MiHilo extends Thread {
public void run() {
// Presenta en pantalla información sobre este hilo en particular
System.out.println( Thread.currentThread() );
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac java1003.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 11

Ejercicio 7
Implementar dos thread usando java, guardar el programa con el nombre de MultiHola.java:
class TestTh extends Thread {
private String nombre;
private int retardo;
// Constructor para almacenar nuestro nombre
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 12

// y el retardo
public TestTh( String s,int d ) {
nombre = s;
retardo = d;
}
// El metodo run() es similar al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecución el tiempo especificado
try {
sleep( retardo );
} catch( InterruptedException e ) {
;
}
// Ahora imprimimos el nombre
System.out.println( "Hola Mundo! "+nombre+" "+retardo );
}
}
public class MultiHola {
public static void main( String args[] ) {
TestTh t1,t2;
// Creamos los threads
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
// Arrancamos los threads
t1.start();
t2.start();
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac MultiHola.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 13

Ejercicio 8.
Implementar dos thread usando java, guardar el programa con el nombre de Principal2.java:
class TestTh extends Thread {
private String nombre;
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 14

private int retardo;


// Constructor para almacenar nuestro nombre
// y el retardo
public TestTh( String s,int d ) {
nombre = s;
retardo = d;
}
// El metodo run() es similar al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecución el tiempo especificado
try {
sleep( retardo );
} catch( InterruptedException e ) {
;
}
// Ahora imprimimos el nombre
System.out.println( "Hola Mundo! "+nombre+" "+retardo );
}
}
public class MultiHola2 {
public static void main( String args[] ) {
TestTh t1,t2,t3,t4,t5,t6,t7;
// Creamos los threads
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) );
t4 = new TestTh( "Thread 4",(int)(Math.random()*2000) );
t5 = new TestTh( "Thread 5",(int)(Math.random()*2000) );
t6 = new TestTh( "Thread 6",(int)(Math.random()*2000) );
t7 = new TestTh( "Thread 7",(int)(Math.random()*2000) );

// Arrancamos los threads


t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac MultiHola2.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 15
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 16

Ejercicio 9
Implementar dos thread usando java, guardar el programa con el nombre de MethodTest.java:
import java.io.*;
public class MethodTest {
static PrintWriter out = new PrintWriter(System.out, true);
public static void main (String args[]) {
FirstThread first = new FirstThread();
SecondThread second = new SecondThread();
first.start();
second.start();
try {
out.println("Waiting for first thread to finish...");
first.join();
out.println("It's a long wait !!");
out.println("Waking up second thread ...");
synchronized(second) {
second.notify();
}
out.println("Waiting for second thread to finish ...");
second.join();
} catch (InterruptedException e) {}
out.println("I'm ready to finish too.");
}
}
class FirstThread extends Thread {
public void run () {
try {
MethodTest.out.println(" First thread starts running.");
sleep(10000);
MethodTest.out.println(" First thread finishes running.");
} catch (InterruptedException e) {}
}
}
class SecondThread extends Thread {
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 17

public synchronized void run () {


try {
MethodTest.out.println(" Second thread starts running.");
MethodTest.out.println(" Second thread suspends itself.");
wait();
MethodTest.out.println(" Second thread runs again and finishes.");
}catch (InterruptedException e) {}
}
}
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac MethodTest.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 18

Ejercicio 10
Implementar dos thread usando java, guardar el programa con el nombre de SimpleThread.java:
public class SimpleThread extends Thread {
private int countDown = 5;
private int threadNumber;
private static int threadCount = 0;
public SimpleThread() {
threadNumber = ++threadCount;
System.out.println("Making " + threadNumber);
}
public void run() {
while(true) {
System.out.println("Thread " +
threadNumber + "(" + countDown + ")");
if(--countDown == 0) return;
}
}
public static void main(String[] args) {
for(int i = 0; i < 5; i++)
new SimpleThread().start();
System.out.println("All Threads Started");
}
} ///:~
Para compilar este programa utilizamos el siguiente comando en línea de comandos
$javac SimpleThread.java
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 19
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 20

II. SOLUCIÓN DE EJERCICIOS PROPUESTOS

Ejercicio 1. Complete la siguiente clase creando los threads correspondientes:


public class Principal {
public static void main(String[] args) {

Thread hilo= new Thread (new Tarea("hilo1"));


Thread hilo2= new Thread (new Tarea("hilo2"));

hilo.start();
hilo2.start();
}
}
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 21

Solución:
El código crea dos hilos (hilo1 y hilo2), cada uno ejecutando la misma tarea definida por la
clase Tarea. Cada hilo imprime su nombre y una iteración cinco veces, con pausas de un
segundo entre iteraciones.

public class Principal {


public static void main(String[] args) {
Thread hilo1 = new Thread(new Tarea("hilo1"));
Thread hilo2 = new Thread(new Tarea("hilo2"));

hilo1.start();
hilo2.start();
}
}

class Tarea implements Runnable {


private String nombreHilo;

public Tarea(String nombreHilo) {


this.nombreHilo = nombreHilo;
}

@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(nombreHilo + " -> Iteración: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(nombreHilo + " terminado");
}
}
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 22

Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 23

Ejercicio 2. Modifique el ejercicio 08 para que los threads sean creados usando un arreglo

Se ha creado un arreglo threads que almacena las instancias de TestTh. Se utiliza un bucle para
crear e inicializar cada instancia con un nombre único y un retardo aleatorio. Otro bucle se
utiliza para arrancar cada hilo desde el arreglo.

class TestTh extends Thread {


private String nombre;
private int retardo;

// Constructor para almacenar nuestro nombre y el retardo


public TestTh(String s, int d) {
nombre = s;
retardo = d;
}

// El método run() es similar al main(), pero para threads.


// Cuando run() termina, el thread muere.
public void run() {
// Retrasamos la ejecución el tiempo especificado
try {
sleep(retardo);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Ahora imprimimos el nombre
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 24

System.out.println("Hola Mundo! " + nombre + " " + retardo);


}
}

public class MultiHola2 {


public static void main(String args[]) {
int numThreads = 7;
TestTh[] threads = new TestTh[numThreads];

// Creamos los threads y los almacenamos en un arreglo


for (int i = 0; i < numThreads; i++) {
threads[i] = new TestTh("Thread " + (i + 1), (int) (Math.random() * 2000));
}

// Arrancamos los threads desde el arreglo


for (int i = 0; i < numThreads; i++) {
threads[i].start();
}
}
}
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 25

Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 26

Ejercicio 3. Cree un programa que permita crear dos semáforos (mostrar rojo, amarillo y
verde) usando dos threads

import java.util.concurrent.Semaphore;

public class ProgramaSemafaro {


public static void main(String[] args) {
Semaphore semaforo = new Semaphore(1); // Crear un semaforo con un permiso de 1

// Crear y comenzar los hilos para los semaforos


Thread semaforo1 = new Thread(new Semaforo(semaforo, "Semaforo1"));
Thread semaforo2 = new Thread(new Semaforo(semaforo, "Semaforo2"));

semaforo1.start();
semaforo2.start();
}
}

class Semaforo implements Runnable {


private Semaphore semaforo;
private String nombre;

public Semaforo(Semaphore semaforo, String nombre) {


this.semaforo = semaforo;
this.nombre = nombre;
}

@Override
public void run() {
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 27

try {
while (true) {
semaforo.acquire(); // Adquirir el semaforo
System.out.println(nombre + " - Rojo"); // Mostrar rojo
Thread.sleep(2000); // Simular la duracion de la luz roja
System.out.println(nombre + " - Verde"); // Mostrar verde
Thread.sleep(2000); // Simular la duracion de la luz verde
System.out.println(nombre + " - Amarillo"); // Mostrar amarillo
Thread.sleep(1000); // Simular la duracion de la luz amarilla
semaforo.release(); // Liberar el semaforo
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 28

Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 29

III. SOLUCIÓN DEL CUESTIONARIO


1 ¿Existen Thread en otros lenguajes de programación?

Sí, existen threads en otros lenguajes de programación [3]. Por ejemplo:


● En C y C++, los threads se pueden crear utilizando la biblioteca POSIX Threads (pthreads),
que proporciona una API estándar para crear y manipular threads.
● En Python, los threads se pueden crear utilizando el módulo de threads, que proporciona
una interfaz de alto nivel para crear y administrar threads.
● En Ruby: Ruby tiene soporte para hilos a través de la clase Thread. Sin embargo, debido a la
implementación específica del intérprete (MRI), la ejecución de hilos puede no ser paralela
en todos los casos.
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 30

● En JavaScript: En JavaScript, que se utiliza principalmente en entornos de navegador, la


ejecución asincrónica se maneja mediante eventos, devoluciones de llamada (callbacks) y
promesas. En entornos de servidor como Node.js, también se pueden utilizar módulos
como worker_threads para trabajar con hilos.
● En Go: Go fue diseñado con la concurrencia en mente. Utiliza goroutines en lugar de hilos,
pero el concepto es similar. Go proporciona un conjunto de primitivas en el paquete sync y
un modelo de canales (channels) para la comunicación entre goroutines.

Además, muchos otros lenguajes de programación, como Rust y Swift, también brindan soporte
para crear y administrar threads. La implementación y la sintaxis específicas para crear threads
pueden variar entre lenguajes de programación, pero el concepto subyacente de crear múltiples
threads de ejecución sigue siendo el mismo.

2 ¿Cuántos estados existen en el ciclo de vida de un Thread?


● Nuevo (New): Cuando se crea un hilo, está en el estado nuevo. En este estado, el hilo aún
no ha comenzado a ejecutarse.

● Ejecutable (Runnable/Ready): Después de llamar al método start(), el hilo se encuentra en


estado ejecutable. Esto significa que está listo para ejecutarse, pero puede que no se esté
ejecutando en ese momento debido a la asignación de tiempo por parte del sistema
operativo.

● En ejecución (Running): Cuando el procesador asigna tiempo al subproceso, ingresa al


estado de ejecución. En este estado, el hilo está ejecutando activamente su código.

● Bloqueado (Blocked/Waiting): Un hilo puede pasar a este estado si está esperando una
condición para continuar. Esto puede deberse a la espera de un recurso compartido, una
señal de otro hilo, o por otras razones.

● Terminado (Terminated/Dead): Un hilo llega a este estado cuando su método run() ha


finalizado o cuando se ha llamado al método stop() (aunque el uso de stop() no se
recomienda).

REFERENCIAS Y BIBLIOGRAFÍA
[1] Ivancea. 30 01 2017 C++ Threads (Hilos): online, Available:
https://code0x66.blogspot.com/2017/01/cthreads-hilos.html
[2] W. Tyler, Taojunsen, K Sharkey, M. B., M. Jones, G. Hogenson and S. Cai, 16 06 2023 Clase Thread: online,
Available: https://learn.microsoft.com/es-es/cpp/standard-library/thread-class?view=msvc-170
[3] https://psp.codeandcoke.com/apuntes:threads
[4]https://wiki.dcc.uchile.cl/cc3301/threads
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 31

También podría gustarte