[{"data":1,"prerenderedAt":515},["ShallowReactive",2],{"navigation_docs":3,"-concurrencia":298,"-concurrencia-surround":510},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":111,"body":300,"description":503,"extension":504,"links":505,"meta":506,"navigation":507,"path":107,"seo":508,"stem":108,"__hash__":509},"docs\u002F4.concurrencia\u002F01.index.md",{"type":301,"value":302,"toc":493},"minimark",[303,307,310,315,338,342,362,366,392,396,462,466,486,490],[304,305,306],"p",{},"La concurrencia es un concepto fundamental en la informática que se refiere a la capacidad de un sistema para ejecutar múltiples tareas al mismo tiempo. Esto se logra mediante la división de un programa en partes más pequeñas, llamadas hilos o procesos, que pueden ejecutarse de manera independiente. La concurrencia es especialmente útil en aplicaciones que requieren una alta eficiencia y rendimiento, como los servidores web, las aplicaciones de bases de datos y los sistemas operativos.",[304,308,309],{},"En un sistema concurrente, las tareas pueden ejecutarse en paralelo, lo que significa que pueden realizarse al mismo tiempo en diferentes núcleos de procesamiento. Esto permite aprovechar al máximo los recursos del sistema y mejorar la velocidad de ejecución de las aplicaciones. Sin embargo, la concurrencia también introduce desafíos, como la sincronización de tareas y la gestión de recursos compartidos, lo que requiere un diseño cuidadoso para evitar problemas como las condiciones de carrera y los bloqueos.",[311,312,314],"h2",{"id":313},"características-de-la-concurrencia","Características de la concurrencia",[316,317,318,326,332],"ul",{},[319,320,321,325],"li",{},[322,323,324],"strong",{},"Paralelismo",": La capacidad de ejecutar múltiples tareas al mismo tiempo en diferentes núcleos de procesamiento.",[319,327,328,331],{},[322,329,330],{},"Sincronización",": La necesidad de coordinar el acceso a recursos compartidos para evitar conflictos y garantizar la integridad de los datos.",[319,333,334,337],{},[322,335,336],{},"Escalabilidad",": La capacidad de un sistema concurrente para manejar un aumento en la carga de trabajo sin degradar el rendimiento.",[311,339,341],{"id":340},"beneficios-de-la-concurrencia","Beneficios de la concurrencia",[316,343,344,350,356],{},[319,345,346,349],{},[322,347,348],{},"Mejora del rendimiento",": Permite que las aplicaciones se ejecuten más rápido al aprovechar los recursos del sistema de manera eficiente.",[319,351,352,355],{},[322,353,354],{},"Mayor capacidad de respuesta",": Las aplicaciones concurrentes pueden responder a las solicitudes de los usuarios de manera más rápida, lo que mejora la experiencia del usuario.",[319,357,358,361],{},[322,359,360],{},"Mejor utilización de recursos",": Permite que las aplicaciones utilicen los recursos del sistema de manera más eficiente, lo que puede reducir los costos operativos y mejorar la eficiencia energética.",[311,363,365],{"id":364},"la-concurrencia-en-java","La Concurrencia en Java",[304,367,368,369,373,374,377,378,381,382,373,385,377,388,391],{},"Java es un lenguaje de programación que ofrece una amplia gama de herramientas y bibliotecas para trabajar con la concurrencia. Java proporciona clases como ",[370,371,372],"code",{},"Thread",", ",[370,375,376],{},"Runnable"," y ",[370,379,380],{},"ExecutorService"," para crear y gestionar hilos, así como mecanismos de sincronización como ",[370,383,384],{},"synchronized",[370,386,387],{},"Lock",[370,389,390],{},"Semaphore"," para coordinar el acceso a recursos compartidos. Además, Java ofrece características avanzadas como las expresiones lambda y las funciones de orden superior, que facilitan la programación concurrente y permiten escribir código más limpio y eficiente.",[311,393,395],{"id":394},"clases-y-bibliotecas-de-concurrencia-en-java","Clases y bibliotecas de concurrencia en Java",[316,397,398,406,414,421,429,439,446],{},[319,399,400,402,403,405],{},[322,401,372],{},": La clase ",[370,404,372],{}," es la base para crear hilos en Java. Permite ejecutar código en paralelo y gestionar la ejecución de tareas concurrentes.",[319,407,408,410,411,413],{},[322,409,376],{},": La interfaz ",[370,412,376],{}," se utiliza para definir tareas que pueden ejecutarse en un hilo. Permite separar la lógica de la tarea de la gestión del hilo.",[319,415,416,410,418,420],{},[322,417,380],{},[370,419,380],{}," proporciona un marco para gestionar la ejecución de tareas concurrentes. Permite crear un grupo de hilos y asignar tareas a esos hilos de manera eficiente.",[319,422,423,425,426,428],{},[322,424,384],{},": La palabra clave ",[370,427,384],{}," se utiliza para controlar el acceso a recursos compartidos, asegurando que solo un hilo pueda acceder a un recurso en un momento dado.",[319,430,431,410,433,435,436,438],{},[322,432,387],{},[370,434,387],{}," proporciona un mecanismo de sincronización más flexible que ",[370,437,384],{},", permitiendo un control más fino sobre el acceso a recursos compartidos.",[319,440,441,402,443,445],{},[322,442,390],{},[370,444,390],{}," se utiliza para controlar el acceso a un recurso limitado, permitiendo que un número específico de hilos accedan al recurso al mismo tiempo.",[319,447,448,451,452,373,455,377,458,461],{},[322,449,450],{},"Concurrent Collections",": Java ofrece una serie de colecciones concurrentes, como ",[370,453,454],{},"ConcurrentHashMap",[370,456,457],{},"CopyOnWriteArrayList",[370,459,460],{},"BlockingQueue",", que están diseñadas para ser seguras en entornos concurrentes y permiten un acceso eficiente a los datos compartidos.",[311,463,465],{"id":464},"desafíos-de-la-concurrencia","Desafíos de la concurrencia",[316,467,468,474,480],{},[319,469,470,473],{},[322,471,472],{},"Condiciones de carrera",": Ocurren cuando dos o más hilos acceden a un recurso compartido al mismo tiempo y al menos uno de ellos modifica el recurso, lo que puede llevar a resultados impredecibles.",[319,475,476,479],{},[322,477,478],{},"Bloqueos",": Ocurren cuando dos o más hilos se bloquean mutuamente al intentar acceder a recursos compartidos, lo que puede llevar a un estado de espera infina.",[319,481,482,485],{},[322,483,484],{},"Inconsistencia de datos",": Ocurre cuando los datos compartidos no se sincronizan correctamente, lo que puede llevar a resultados incorrectos o inesperados.",[311,487,489],{"id":488},"conclusión","Conclusión",[304,491,492],{},"En resumen, la concurrencia es una característica esencial en la informática moderna que permite a los sistemas ejecutar múltiples tareas al mismo tiempo, mejorando la eficiencia y el rendimiento de las aplicaciones. Sin embargo, también introduce desafíos que requieren un diseño cuidadoso para garantizar la correcta sincronización y gestión de recursos compartidos. Java ofrece una amplia gama de herramientas y bibliotecas para trabajar con la concurrencia, lo que facilita el desarrollo de aplicaciones concurrentes de manera eficiente y segura.",{"title":494,"searchDepth":495,"depth":495,"links":496},"",2,[497,498,499,500,501,502],{"id":313,"depth":495,"text":314},{"id":340,"depth":495,"text":341},{"id":364,"depth":495,"text":365},{"id":394,"depth":495,"text":395},{"id":464,"depth":495,"text":465},{"id":488,"depth":495,"text":489},"La concurrencia es la capacidad de un sistema para ejecutar múltiples tareas al mismo tiempo, lo que permite mejorar la eficiencia y el rendimiento de las aplicaciones.","md",null,{"editButton":104},{"icon":83},{"title":111,"description":503},"oOSrv5AIjSdYLC5Os4_9FS9iioiPs1aqYVNcS9Elqso",[511,513],{"title":101,"path":102,"stem":103,"description":512,"icon":83,"children":-1},"Aprende a utilizar delegadores de UI para personalizar la apariencia de los componentes en Swing, creando una experiencia de usuario única y atractiva.",{"title":113,"path":114,"stem":115,"description":514,"icon":83,"children":-1},"Las unidades de ejecución son los componentes básicos de la concurrencia, que permiten ejecutar tareas de manera independiente y en paralelo, mejorando la eficiencia y el rendimiento de las aplicaciones.",1775101372084]