├── README.md ├── assets └── imagen.png └── exercise ├── .gitignore ├── pom.xml └── src └── main └── java └── org └── example └── VirtualThreadMain.java /README.md: -------------------------------------------------------------------------------- 1 | ![Descripción alternativa](./assets/imagen.png) 2 | 3 |

4 | @unprogramadornace 5 | @unprogramadornace 6 | @unprogramadornace 7 | @unprogramadornace 8 |

9 | 10 | # Java Exercises - There We Go!! 11 | Muchas gracias por estar aquí, si te gusta mi contenido y son de gran utilidad para ti por favor ayudame dando tu valioso like al video y suscribiéndote al canal, ya que esto es de gran ayuda para mí y me motiva a seguir creando contenido de gran utilidad para ti. 12 | 13 | También me ayuda mucho si puedes marcar el repositorio con una estrella en la parte superior de la derecha, sería un gran detalle de tu parte. 14 | 15 | #### Enlace al canal: https://www.youtube.com/channel/UCTXForyROk00E6jiaNKSV1A 16 | 17 | ### Ejercicio 18 | Plantear un programa que ejecute **DOS HILOS** de programa al mismo tiempo, para esto se requiere que uno de los hilos realice un conteo regresivo temporizado partiendo de un número establecido por el usuario, la temporización entre cada ejecución del hilo debe ser de 600 ms, el otro hilo, debe mostrar las letras del alfabeto partiendo desde la A hasta una letra ingresada por el usuario, este hilo debe estar temporizado a 500 ms. 19 | 20 | Ambos hilos deben detenerse cuando el hilo numero 1 encuentre la letra ingresada por el usuario. 21 | 22 | 23 | Al ejecutar el programa en consola se debe evidenciar la salida entregada por ambos hilos, al final de su ejecución cada hilo debe mostrar el mensaje “Trabajo del hilo [nombre] terminado”. 24 | 25 | 26 | ¡Saludos! -------------------------------------------------------------------------------- /assets/imagen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnProgramadorNaceOfficial/java-execises/aa26b840c8cc23c05e38a4938383aacb5404edaf/assets/imagen.png -------------------------------------------------------------------------------- /exercise/.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | !**/src/main/**/target/ 4 | !**/src/test/**/target/ 5 | 6 | ### IntelliJ IDEA ### 7 | .idea/modules.xml 8 | .idea/jarRepositories.xml 9 | .idea/compiler.xml 10 | .idea/libraries/ 11 | *.iws 12 | *.iml 13 | *.ipr 14 | 15 | ### Eclipse ### 16 | .apt_generated 17 | .classpath 18 | .factorypath 19 | .project 20 | .settings 21 | .springBeans 22 | .sts4-cache 23 | 24 | ### NetBeans ### 25 | /nbproject/private/ 26 | /nbbuild/ 27 | /dist/ 28 | /nbdist/ 29 | /.nb-gradle/ 30 | build/ 31 | !**/src/main/**/build/ 32 | !**/src/test/**/build/ 33 | 34 | ### VS Code ### 35 | .vscode/ 36 | 37 | ### Mac OS ### 38 | .DS_Store -------------------------------------------------------------------------------- /exercise/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.example 8 | ThreadExampe 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 21 13 | 21 14 | UTF-8 15 | 16 | 17 | -------------------------------------------------------------------------------- /exercise/src/main/java/org/example/VirtualThreadMain.java: -------------------------------------------------------------------------------- 1 | package org.example; 2 | 3 | import javax.swing.*; 4 | import java.util.concurrent.ExecutorService; 5 | import java.util.concurrent.Executors; 6 | import java.util.concurrent.TimeUnit; 7 | import java.util.concurrent.atomic.AtomicBoolean; 8 | import java.util.concurrent.atomic.AtomicInteger; 9 | 10 | public class VirtualThreadMain { 11 | 12 | public static void main(String[] args) throws InterruptedException { 13 | ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); 14 | 15 | AtomicBoolean found = new AtomicBoolean(false); 16 | 17 | // Hilo buscar letra 18 | char character = JOptionPane.showInputDialog("Ingresa una letra").charAt(0); 19 | 20 | Runnable thread1 = () -> { 21 | try { 22 | Thread.currentThread().setName("Thread-Character"); 23 | 24 | for (char i = 'A'; i <= character; i++) { 25 | Thread.sleep(500); 26 | System.out.print(i); 27 | 28 | if(i == character){ 29 | found.set(true); 30 | System.out.println("Letra " + i + " encontrada."); 31 | System.out.println("Trabajo del hilo " + Thread.currentThread().getName() + " terminado."); 32 | } 33 | } 34 | 35 | } catch (Exception e) { 36 | System.out.println("Error: " + e.getMessage()); 37 | } 38 | }; 39 | 40 | 41 | // Hilo para contar hacia atras 42 | int number = Integer.parseInt(JOptionPane.showInputDialog("Ingresa un numero")); 43 | AtomicInteger atomicInteger = new AtomicInteger(number); 44 | Runnable thread2 = () -> { 45 | try { 46 | Thread.currentThread().setName("Thread-Number"); 47 | 48 | while(found.get() == false){ 49 | Thread.sleep(600); 50 | System.out.println(atomicInteger.getAndDecrement()); 51 | } 52 | 53 | System.out.println("Trabajo del hilo " + Thread.currentThread().getName() + " terminado."); 54 | 55 | } catch (Exception e){ 56 | System.out.println("Error: " + e.getMessage()); 57 | } 58 | }; 59 | 60 | executor.submit(thread1); 61 | executor.submit(thread2); 62 | executor.awaitTermination(30, TimeUnit.SECONDS); 63 | executor.shutdown(); 64 | } 65 | } --------------------------------------------------------------------------------