Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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
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
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();
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
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
// 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
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
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
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
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
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.
hilo1.start();
hilo2.start();
}
}
@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
Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA
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.
Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA
Ejercicio 3. Cree un programa que permita crear dos semáforos (mostrar rojo, amarillo y
verde) usando dos threads
import java.util.concurrent.Semaphore;
semaforo1.start();
semaforo2.start();
}
}
@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
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
Ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA
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.
● 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.
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