[{"data":1,"prerenderedAt":1592},["ShallowReactive",2],{"navigation_docs":3,"-ejemplos-ejemplo-09":298,"-ejemplos-ejemplo-09-surround":1587},[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":250,"body":300,"description":1580,"extension":1581,"links":1582,"meta":1583,"navigation":1584,"path":251,"seo":1585,"stem":252,"__hash__":1586},"docs\u002F7.ejemplos\u002F09.ejemplo-09.md",{"type":301,"value":302,"toc":1563},"minimark",[303,308,312,316,319,323,326,330,338,360,367,641,647,865,871,1148,1154,1330,1337,1556,1559],[304,305,307],"h2",{"id":306},"cómo-funciona-el-sistema-de-pedidos-en-un-restaurante","¿Cómo funciona el sistema de pedidos en un restaurante?",[309,310,311],"p",{},"En un restaurante, los meseros (Waiters) toman los pedidos de los clientes y los envían a la cocina. La cocina tiene varios cocineros (Cooks) que preparan los pedidos. Para manejar eficientemente los pedidos, el restaurante utiliza un sistema de colas. Cuando un mesero toma un pedido, lo coloca en una cola de pedidos. Los cocineros toman los pedidos de la cola y los preparan. Una vez que un pedido está listo, el cocinero lo entrega al mesero, quien a su vez lo lleva al cliente.",[304,313,315],{"id":314},"cómo-se-asignan-los-pedidos-a-los-cocineros","¿Cómo se asignan los pedidos a los cocineros?",[309,317,318],{},"Cuando un mesero coloca un pedido en la cola, el sistema de pedidos asigna automáticamente el pedido al siguiente cocinero disponible. Si todos los cocineros están ocupados preparando otros pedidos, el nuevo pedido permanecerá en la cola hasta que un cocinero esté disponible para prepararlo. Esto asegura que los pedidos se procesen de manera eficiente y que los clientes reciban sus pedidos lo más rápido posible.",[304,320,322],{"id":321},"cómo-se-asegura-que-los-clientes-reciban-sus-pedidos-de-manera-eficiente","¿Cómo se asegura que los clientes reciban sus pedidos de manera eficiente?",[309,324,325],{},"El sistema de pedidos en el restaurante está diseñado para minimizar el tiempo de espera de los clientes. Al utilizar una cola para manejar los pedidos, el restaurante puede asegurarse de que los pedidos se procesen en el orden en que fueron recibidos. Además, al asignar automáticamente los pedidos a los cocineros disponibles, el restaurante puede maximizar la eficiencia de la cocina y reducir el tiempo que tarda cada pedido en ser preparado. Esto garantiza que los clientes reciban sus pedidos de manera rápida y eficiente, mejorando su experiencia en el restaurante.",[304,327,329],{"id":328},"representación-gráfica-del-sistema-de-pedidos-con-java","Representación gráfica del sistema de pedidos con Java",[309,331,332,333,337],{},"Para nuestro ejemplo y para representar gráficamente el sistema de pedidos en un restaurante, podemos utilizar Java con la biblioteca Swing para crear una interfaz gráfica que muestre cómo los pedidos se mueven a través de la cola y cómo los cocineros los procesan. De igual manera, usaremos la clase ",[334,335,336],"code",{},"ConcurrentLinkedQueue"," para manejar la cola de pedidos de manera segura en un entorno concurrente, ya que simularemos un sistema con múltiples meseros y cocineros, pero solo una barra de pedidos.",[309,339,340,341,344,345,348,349,352,353,356,357,359],{},"Para esto, podemos crear una clase ",[334,342,343],{},"Order"," que represente cada pedido, una clase ",[334,346,347],{},"Cook"," que represente a los cocineros y una clase ",[334,350,351],{},"Restaurant"," que maneje la cola de pedidos y la asignación a los cocineros. La interfaz gráfica mostrará la cola de pedidos y el estado de cada cocinero. Además de un enumerado ",[334,354,355],{},"Dish"," para representar los diferentes tipos de platos que se pueden pedir en el restaurante con un tiempo aleatorio de preparación, y una clase ",[334,358,343],{}," para representar cada pedido con un identificador único y el plato solicitado.",[361,362,364,365],"h3",{"id":363},"_1-enumerado-dish","1. Enumerado ",[334,366,355],{},[368,369,374],"pre",{"className":370,"code":371,"language":372,"meta":373,"style":373},"language-java shiki shiki-themes github-dark","public enum Dish {\n    PASTA(2000, \"Pasta\"),\n    BURGER(3000, \"Amburguesa\"),\n    SALAD(1000, \"Ensalada\"),\n    PIZZA(4000, \"Pizza\");\n\n    final int preparationTime;\n    final String name;\n\n    Dish(int preparationTime, String name) {\n        this.name = name;\n        this.preparationTime = preparationTime;\n    }\n    \n    public int getPreparationTime() {\n        return preparationTime;\n    }\n    \n    @Override\n    public String toString() {\n        return name;\n    }\n}\n","java","",[334,375,376,396,419,437,455,474,481,493,501,506,530,545,557,563,569,583,591,596,601,610,623,630,635],{"__ignoreMap":373},[377,378,381,385,388,392],"span",{"class":379,"line":380},"line",1,[377,382,384],{"class":383},"snl16","public",[377,386,387],{"class":383}," enum",[377,389,391],{"class":390},"svObZ"," Dish",[377,393,395],{"class":394},"s95oV"," {\n",[377,397,399,403,406,409,412,416],{"class":379,"line":398},2,[377,400,402],{"class":401},"sDLfK","    PASTA",[377,404,405],{"class":394},"(",[377,407,408],{"class":401},"2000",[377,410,411],{"class":394},", ",[377,413,415],{"class":414},"sU2Wk","\"Pasta\"",[377,417,418],{"class":394},"),\n",[377,420,422,425,427,430,432,435],{"class":379,"line":421},3,[377,423,424],{"class":401},"    BURGER",[377,426,405],{"class":394},[377,428,429],{"class":401},"3000",[377,431,411],{"class":394},[377,433,434],{"class":414},"\"Amburguesa\"",[377,436,418],{"class":394},[377,438,440,443,445,448,450,453],{"class":379,"line":439},4,[377,441,442],{"class":401},"    SALAD",[377,444,405],{"class":394},[377,446,447],{"class":401},"1000",[377,449,411],{"class":394},[377,451,452],{"class":414},"\"Ensalada\"",[377,454,418],{"class":394},[377,456,458,461,463,466,468,471],{"class":379,"line":457},5,[377,459,460],{"class":401},"    PIZZA",[377,462,405],{"class":394},[377,464,465],{"class":401},"4000",[377,467,411],{"class":394},[377,469,470],{"class":414},"\"Pizza\"",[377,472,473],{"class":394},");\n",[377,475,477],{"class":379,"line":476},6,[377,478,480],{"emptyLinePlaceholder":479},true,"\n",[377,482,484,487,490],{"class":379,"line":483},7,[377,485,486],{"class":383},"    final",[377,488,489],{"class":383}," int",[377,491,492],{"class":394}," preparationTime;\n",[377,494,496,498],{"class":379,"line":495},8,[377,497,486],{"class":383},[377,499,500],{"class":394}," String name;\n",[377,502,504],{"class":379,"line":503},9,[377,505,480],{"emptyLinePlaceholder":479},[377,507,509,512,514,517,521,524,527],{"class":379,"line":508},10,[377,510,511],{"class":390},"    Dish",[377,513,405],{"class":394},[377,515,516],{"class":383},"int",[377,518,520],{"class":519},"s9osk"," preparationTime",[377,522,523],{"class":394},", String ",[377,525,526],{"class":519},"name",[377,528,529],{"class":394},") {\n",[377,531,533,536,539,542],{"class":379,"line":532},11,[377,534,535],{"class":401},"        this",[377,537,538],{"class":394},".name ",[377,540,541],{"class":383},"=",[377,543,544],{"class":394}," name;\n",[377,546,548,550,553,555],{"class":379,"line":547},12,[377,549,535],{"class":401},[377,551,552],{"class":394},".preparationTime ",[377,554,541],{"class":383},[377,556,492],{"class":394},[377,558,560],{"class":379,"line":559},13,[377,561,562],{"class":394},"    }\n",[377,564,566],{"class":379,"line":565},14,[377,567,568],{"class":394},"    \n",[377,570,572,575,577,580],{"class":379,"line":571},15,[377,573,574],{"class":383},"    public",[377,576,489],{"class":383},[377,578,579],{"class":390}," getPreparationTime",[377,581,582],{"class":394},"() {\n",[377,584,586,589],{"class":379,"line":585},16,[377,587,588],{"class":383},"        return",[377,590,492],{"class":394},[377,592,594],{"class":379,"line":593},17,[377,595,562],{"class":394},[377,597,599],{"class":379,"line":598},18,[377,600,568],{"class":394},[377,602,604,607],{"class":379,"line":603},19,[377,605,606],{"class":394},"    @",[377,608,609],{"class":383},"Override\n",[377,611,613,615,618,621],{"class":379,"line":612},20,[377,614,574],{"class":383},[377,616,617],{"class":394}," String ",[377,619,620],{"class":390},"toString",[377,622,582],{"class":394},[377,624,626,628],{"class":379,"line":625},21,[377,627,588],{"class":383},[377,629,544],{"class":394},[377,631,633],{"class":379,"line":632},22,[377,634,562],{"class":394},[377,636,638],{"class":379,"line":637},23,[377,639,640],{"class":394},"}\n",[361,642,644,645],{"id":643},"_2-clase-order","2. Clase ",[334,646,343],{},[368,648,650],{"className":370,"code":649,"language":372,"meta":373,"style":373},"public class Order {\n    private static int idCounter = 0;\n    private final int id;\n    private final Dish dish;\n\n    public Order(Dish dish) {\n        this.id = idCounter++;\n        this.dish = dish;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public Dish getDish() {\n        return dish;\n    }\n\n    @Override\n    public String toString() {\n        return \"Orden #\" + id + \": \" + dish.toString();\n    }\n}\n",[334,651,652,664,685,697,706,710,724,741,753,757,761,772,778,782,786,798,804,808,812,818,828,857,861],{"__ignoreMap":373},[377,653,654,656,659,662],{"class":379,"line":380},[377,655,384],{"class":383},[377,657,658],{"class":383}," class",[377,660,661],{"class":390}," Order",[377,663,395],{"class":394},[377,665,666,669,672,674,677,679,682],{"class":379,"line":398},[377,667,668],{"class":383},"    private",[377,670,671],{"class":383}," static",[377,673,489],{"class":383},[377,675,676],{"class":394}," idCounter ",[377,678,541],{"class":383},[377,680,681],{"class":401}," 0",[377,683,684],{"class":394},";\n",[377,686,687,689,692,694],{"class":379,"line":421},[377,688,668],{"class":383},[377,690,691],{"class":383}," final",[377,693,489],{"class":383},[377,695,696],{"class":394}," id;\n",[377,698,699,701,703],{"class":379,"line":439},[377,700,668],{"class":383},[377,702,691],{"class":383},[377,704,705],{"class":394}," Dish dish;\n",[377,707,708],{"class":379,"line":457},[377,709,480],{"emptyLinePlaceholder":479},[377,711,712,714,716,719,722],{"class":379,"line":476},[377,713,574],{"class":383},[377,715,661],{"class":390},[377,717,718],{"class":394},"(Dish ",[377,720,721],{"class":519},"dish",[377,723,529],{"class":394},[377,725,726,728,731,733,736,739],{"class":379,"line":483},[377,727,535],{"class":401},[377,729,730],{"class":394},".id ",[377,732,541],{"class":383},[377,734,735],{"class":394}," idCounter",[377,737,738],{"class":383},"++",[377,740,684],{"class":394},[377,742,743,745,748,750],{"class":379,"line":495},[377,744,535],{"class":401},[377,746,747],{"class":394},".dish ",[377,749,541],{"class":383},[377,751,752],{"class":394}," dish;\n",[377,754,755],{"class":379,"line":503},[377,756,562],{"class":394},[377,758,759],{"class":379,"line":508},[377,760,480],{"emptyLinePlaceholder":479},[377,762,763,765,767,770],{"class":379,"line":532},[377,764,574],{"class":383},[377,766,489],{"class":383},[377,768,769],{"class":390}," getId",[377,771,582],{"class":394},[377,773,774,776],{"class":379,"line":547},[377,775,588],{"class":383},[377,777,696],{"class":394},[377,779,780],{"class":379,"line":559},[377,781,562],{"class":394},[377,783,784],{"class":379,"line":565},[377,785,480],{"emptyLinePlaceholder":479},[377,787,788,790,793,796],{"class":379,"line":571},[377,789,574],{"class":383},[377,791,792],{"class":394}," Dish ",[377,794,795],{"class":390},"getDish",[377,797,582],{"class":394},[377,799,800,802],{"class":379,"line":585},[377,801,588],{"class":383},[377,803,752],{"class":394},[377,805,806],{"class":379,"line":593},[377,807,562],{"class":394},[377,809,810],{"class":379,"line":598},[377,811,480],{"emptyLinePlaceholder":479},[377,813,814,816],{"class":379,"line":603},[377,815,606],{"class":394},[377,817,609],{"class":383},[377,819,820,822,824,826],{"class":379,"line":612},[377,821,574],{"class":383},[377,823,617],{"class":394},[377,825,620],{"class":390},[377,827,582],{"class":394},[377,829,830,832,835,838,841,844,847,849,852,854],{"class":379,"line":625},[377,831,588],{"class":383},[377,833,834],{"class":414}," \"Orden #\"",[377,836,837],{"class":383}," +",[377,839,840],{"class":394}," id ",[377,842,843],{"class":383},"+",[377,845,846],{"class":414}," \": \"",[377,848,837],{"class":383},[377,850,851],{"class":394}," dish.",[377,853,620],{"class":390},[377,855,856],{"class":394},"();\n",[377,858,859],{"class":379,"line":632},[377,860,562],{"class":394},[377,862,863],{"class":379,"line":637},[377,864,640],{"class":394},[361,866,868,869],{"id":867},"_3-clase-cook","3. Clase ",[334,870,347],{},[368,872,874],{"className":370,"code":873,"language":372,"meta":373,"style":373},"public class Cook implements Runnable {\n    private final String name;\n    private final Restaurant restaurant;\n\n    public Cook(String name, Restaurant restaurant) {\n        this.name = name;\n        this.restaurant = restaurant;\n    }\n\n    @Override\n    public void run() {\n        while (restaurant.hasOrders()) {\n            Order order = restaurant.takeOrder();\n            if (order != null) {\n                System.out.println(name + \" está preparando \" + order);\n                try {\n                    Thread.sleep(order.getDish().getPreparationTime());\n                } catch (InterruptedException e) {\n                    Thread.currentThread().interrupt();\n                }\n                System.out.println(name + \" ha terminado de preparar \" + order);\n            }\n        }\n    }\n}\n",[334,875,876,893,901,910,914,933,943,955,959,963,969,981,995,1010,1026,1047,1054,1076,1092,1106,1111,1128,1133,1138,1143],{"__ignoreMap":373},[377,877,878,880,882,885,888,891],{"class":379,"line":380},[377,879,384],{"class":383},[377,881,658],{"class":383},[377,883,884],{"class":390}," Cook",[377,886,887],{"class":383}," implements",[377,889,890],{"class":390}," Runnable",[377,892,395],{"class":394},[377,894,895,897,899],{"class":379,"line":398},[377,896,668],{"class":383},[377,898,691],{"class":383},[377,900,500],{"class":394},[377,902,903,905,907],{"class":379,"line":421},[377,904,668],{"class":383},[377,906,691],{"class":383},[377,908,909],{"class":394}," Restaurant restaurant;\n",[377,911,912],{"class":379,"line":439},[377,913,480],{"emptyLinePlaceholder":479},[377,915,916,918,920,923,925,928,931],{"class":379,"line":457},[377,917,574],{"class":383},[377,919,884],{"class":390},[377,921,922],{"class":394},"(String ",[377,924,526],{"class":519},[377,926,927],{"class":394},", Restaurant ",[377,929,930],{"class":519},"restaurant",[377,932,529],{"class":394},[377,934,935,937,939,941],{"class":379,"line":476},[377,936,535],{"class":401},[377,938,538],{"class":394},[377,940,541],{"class":383},[377,942,544],{"class":394},[377,944,945,947,950,952],{"class":379,"line":483},[377,946,535],{"class":401},[377,948,949],{"class":394},".restaurant ",[377,951,541],{"class":383},[377,953,954],{"class":394}," restaurant;\n",[377,956,957],{"class":379,"line":495},[377,958,562],{"class":394},[377,960,961],{"class":379,"line":503},[377,962,480],{"emptyLinePlaceholder":479},[377,964,965,967],{"class":379,"line":508},[377,966,606],{"class":394},[377,968,609],{"class":383},[377,970,971,973,976,979],{"class":379,"line":532},[377,972,574],{"class":383},[377,974,975],{"class":383}," void",[377,977,978],{"class":390}," run",[377,980,582],{"class":394},[377,982,983,986,989,992],{"class":379,"line":547},[377,984,985],{"class":383},"        while",[377,987,988],{"class":394}," (restaurant.",[377,990,991],{"class":390},"hasOrders",[377,993,994],{"class":394},"()) {\n",[377,996,997,1000,1002,1005,1008],{"class":379,"line":559},[377,998,999],{"class":394},"            Order order ",[377,1001,541],{"class":383},[377,1003,1004],{"class":394}," restaurant.",[377,1006,1007],{"class":390},"takeOrder",[377,1009,856],{"class":394},[377,1011,1012,1015,1018,1021,1024],{"class":379,"line":565},[377,1013,1014],{"class":383},"            if",[377,1016,1017],{"class":394}," (order ",[377,1019,1020],{"class":383},"!=",[377,1022,1023],{"class":401}," null",[377,1025,529],{"class":394},[377,1027,1028,1031,1034,1037,1039,1042,1044],{"class":379,"line":571},[377,1029,1030],{"class":394},"                System.out.",[377,1032,1033],{"class":390},"println",[377,1035,1036],{"class":394},"(name ",[377,1038,843],{"class":383},[377,1040,1041],{"class":414}," \" está preparando \"",[377,1043,837],{"class":383},[377,1045,1046],{"class":394}," order);\n",[377,1048,1049,1052],{"class":379,"line":585},[377,1050,1051],{"class":383},"                try",[377,1053,395],{"class":394},[377,1055,1056,1059,1062,1065,1067,1070,1073],{"class":379,"line":593},[377,1057,1058],{"class":394},"                    Thread.",[377,1060,1061],{"class":390},"sleep",[377,1063,1064],{"class":394},"(order.",[377,1066,795],{"class":390},[377,1068,1069],{"class":394},"().",[377,1071,1072],{"class":390},"getPreparationTime",[377,1074,1075],{"class":394},"());\n",[377,1077,1078,1081,1084,1087,1090],{"class":379,"line":598},[377,1079,1080],{"class":394},"                } ",[377,1082,1083],{"class":383},"catch",[377,1085,1086],{"class":394}," (InterruptedException ",[377,1088,1089],{"class":519},"e",[377,1091,529],{"class":394},[377,1093,1094,1096,1099,1101,1104],{"class":379,"line":603},[377,1095,1058],{"class":394},[377,1097,1098],{"class":390},"currentThread",[377,1100,1069],{"class":394},[377,1102,1103],{"class":390},"interrupt",[377,1105,856],{"class":394},[377,1107,1108],{"class":379,"line":612},[377,1109,1110],{"class":394},"                }\n",[377,1112,1113,1115,1117,1119,1121,1124,1126],{"class":379,"line":625},[377,1114,1030],{"class":394},[377,1116,1033],{"class":390},[377,1118,1036],{"class":394},[377,1120,843],{"class":383},[377,1122,1123],{"class":414}," \" ha terminado de preparar \"",[377,1125,837],{"class":383},[377,1127,1046],{"class":394},[377,1129,1130],{"class":379,"line":632},[377,1131,1132],{"class":394},"            }\n",[377,1134,1135],{"class":379,"line":637},[377,1136,1137],{"class":394},"        }\n",[377,1139,1141],{"class":379,"line":1140},24,[377,1142,562],{"class":394},[377,1144,1146],{"class":379,"line":1145},25,[377,1147,640],{"class":394},[361,1149,1151,1152],{"id":1150},"_4-clase-restaurant","4. Clase ",[334,1153,351],{},[368,1155,1157],{"className":370,"code":1156,"language":372,"meta":373,"style":373},"import java.util.concurrent.ConcurrentLinkedQueue;\n\npublic class Restaurant {\n  private final ConcurrentLinkedQueue\u003COrder> orderQueue = new ConcurrentLinkedQueue\u003C>();\n\n  public void placeOrder(Order order) {\n    orderQueue.add(order);\n    System.out.println(\"Se ha colocado \" + order);\n  }\n\n  public Order takeOrder() {\n    return orderQueue.poll();\n  }\n\n  public boolean hasOrders() {\n    return !orderQueue.isEmpty();\n  }\n}\n",[334,1158,1159,1167,1171,1182,1205,1209,1227,1238,1254,1259,1263,1274,1287,1291,1295,1307,1322,1326],{"__ignoreMap":373},[377,1160,1161,1164],{"class":379,"line":380},[377,1162,1163],{"class":383},"import",[377,1165,1166],{"class":394}," java.util.concurrent.ConcurrentLinkedQueue;\n",[377,1168,1169],{"class":379,"line":398},[377,1170,480],{"emptyLinePlaceholder":479},[377,1172,1173,1175,1177,1180],{"class":379,"line":421},[377,1174,384],{"class":383},[377,1176,658],{"class":383},[377,1178,1179],{"class":390}," Restaurant",[377,1181,395],{"class":394},[377,1183,1184,1187,1189,1192,1194,1197,1199,1202],{"class":379,"line":439},[377,1185,1186],{"class":383},"  private",[377,1188,691],{"class":383},[377,1190,1191],{"class":394}," ConcurrentLinkedQueue\u003C",[377,1193,343],{"class":383},[377,1195,1196],{"class":394},"> orderQueue ",[377,1198,541],{"class":383},[377,1200,1201],{"class":383}," new",[377,1203,1204],{"class":394}," ConcurrentLinkedQueue\u003C>();\n",[377,1206,1207],{"class":379,"line":457},[377,1208,480],{"emptyLinePlaceholder":479},[377,1210,1211,1214,1216,1219,1222,1225],{"class":379,"line":476},[377,1212,1213],{"class":383},"  public",[377,1215,975],{"class":383},[377,1217,1218],{"class":390}," placeOrder",[377,1220,1221],{"class":394},"(Order ",[377,1223,1224],{"class":519},"order",[377,1226,529],{"class":394},[377,1228,1229,1232,1235],{"class":379,"line":483},[377,1230,1231],{"class":394},"    orderQueue.",[377,1233,1234],{"class":390},"add",[377,1236,1237],{"class":394},"(order);\n",[377,1239,1240,1243,1245,1247,1250,1252],{"class":379,"line":495},[377,1241,1242],{"class":394},"    System.out.",[377,1244,1033],{"class":390},[377,1246,405],{"class":394},[377,1248,1249],{"class":414},"\"Se ha colocado \"",[377,1251,837],{"class":383},[377,1253,1046],{"class":394},[377,1255,1256],{"class":379,"line":503},[377,1257,1258],{"class":394},"  }\n",[377,1260,1261],{"class":379,"line":508},[377,1262,480],{"emptyLinePlaceholder":479},[377,1264,1265,1267,1270,1272],{"class":379,"line":532},[377,1266,1213],{"class":383},[377,1268,1269],{"class":394}," Order ",[377,1271,1007],{"class":390},[377,1273,582],{"class":394},[377,1275,1276,1279,1282,1285],{"class":379,"line":547},[377,1277,1278],{"class":383},"    return",[377,1280,1281],{"class":394}," orderQueue.",[377,1283,1284],{"class":390},"poll",[377,1286,856],{"class":394},[377,1288,1289],{"class":379,"line":559},[377,1290,1258],{"class":394},[377,1292,1293],{"class":379,"line":565},[377,1294,480],{"emptyLinePlaceholder":479},[377,1296,1297,1299,1302,1305],{"class":379,"line":571},[377,1298,1213],{"class":383},[377,1300,1301],{"class":383}," boolean",[377,1303,1304],{"class":390}," hasOrders",[377,1306,582],{"class":394},[377,1308,1309,1311,1314,1317,1320],{"class":379,"line":585},[377,1310,1278],{"class":383},[377,1312,1313],{"class":383}," !",[377,1315,1316],{"class":394},"orderQueue.",[377,1318,1319],{"class":390},"isEmpty",[377,1321,856],{"class":394},[377,1323,1324],{"class":379,"line":593},[377,1325,1258],{"class":394},[377,1327,1328],{"class":379,"line":598},[377,1329,640],{"class":394},[361,1331,1333,1334],{"id":1332},"_5-clase-main","5. Clase ",[334,1335,1336],{},"Main",[368,1338,1340],{"className":370,"code":1339,"language":372,"meta":373,"style":373},"public class Main {\n    public static void main(String[] args) {\n        Restaurant restaurant = new Restaurant();\n        \n        \u002F\u002F Crear cocineros\n        Cook cook1 = new Cook(\"Cocinero 1\", restaurant);\n        Cook cook2 = new Cook(\"Cocinero 2\", restaurant);\n        \n        \u002F\u002F Iniciar los hilos de los cocineros\n        new Thread(cook1).start();\n        new Thread(cook2).start();\n        \n        \u002F\u002F Simular la colocación de pedidos\n        restaurant.placeOrder(new Order(Dish.PASTA));\n        restaurant.placeOrder(new Order(Dish.BURGER));\n        restaurant.placeOrder(new Order(Dish.SALAD));\n        restaurant.placeOrder(new Order(Dish.PIZZA));\n    }\n}\n",[334,1341,1342,1353,1377,1390,1395,1401,1420,1438,1442,1447,1463,1476,1480,1485,1503,1518,1533,1548,1552],{"__ignoreMap":373},[377,1343,1344,1346,1348,1351],{"class":379,"line":380},[377,1345,384],{"class":383},[377,1347,658],{"class":383},[377,1349,1350],{"class":390}," Main",[377,1352,395],{"class":394},[377,1354,1355,1357,1359,1361,1364,1366,1369,1372,1375],{"class":379,"line":398},[377,1356,574],{"class":383},[377,1358,671],{"class":383},[377,1360,975],{"class":383},[377,1362,1363],{"class":390}," main",[377,1365,405],{"class":394},[377,1367,1368],{"class":383},"String",[377,1370,1371],{"class":394},"[] ",[377,1373,1374],{"class":519},"args",[377,1376,529],{"class":394},[377,1378,1379,1382,1384,1386,1388],{"class":379,"line":421},[377,1380,1381],{"class":394},"        Restaurant restaurant ",[377,1383,541],{"class":383},[377,1385,1201],{"class":383},[377,1387,1179],{"class":390},[377,1389,856],{"class":394},[377,1391,1392],{"class":379,"line":439},[377,1393,1394],{"class":394},"        \n",[377,1396,1397],{"class":379,"line":457},[377,1398,1400],{"class":1399},"sAwPA","        \u002F\u002F Crear cocineros\n",[377,1402,1403,1406,1408,1410,1412,1414,1417],{"class":379,"line":476},[377,1404,1405],{"class":394},"        Cook cook1 ",[377,1407,541],{"class":383},[377,1409,1201],{"class":383},[377,1411,884],{"class":390},[377,1413,405],{"class":394},[377,1415,1416],{"class":414},"\"Cocinero 1\"",[377,1418,1419],{"class":394},", restaurant);\n",[377,1421,1422,1425,1427,1429,1431,1433,1436],{"class":379,"line":483},[377,1423,1424],{"class":394},"        Cook cook2 ",[377,1426,541],{"class":383},[377,1428,1201],{"class":383},[377,1430,884],{"class":390},[377,1432,405],{"class":394},[377,1434,1435],{"class":414},"\"Cocinero 2\"",[377,1437,1419],{"class":394},[377,1439,1440],{"class":379,"line":495},[377,1441,1394],{"class":394},[377,1443,1444],{"class":379,"line":503},[377,1445,1446],{"class":1399},"        \u002F\u002F Iniciar los hilos de los cocineros\n",[377,1448,1449,1452,1455,1458,1461],{"class":379,"line":508},[377,1450,1451],{"class":383},"        new",[377,1453,1454],{"class":390}," Thread",[377,1456,1457],{"class":394},"(cook1).",[377,1459,1460],{"class":390},"start",[377,1462,856],{"class":394},[377,1464,1465,1467,1469,1472,1474],{"class":379,"line":532},[377,1466,1451],{"class":383},[377,1468,1454],{"class":390},[377,1470,1471],{"class":394},"(cook2).",[377,1473,1460],{"class":390},[377,1475,856],{"class":394},[377,1477,1478],{"class":379,"line":547},[377,1479,1394],{"class":394},[377,1481,1482],{"class":379,"line":559},[377,1483,1484],{"class":1399},"        \u002F\u002F Simular la colocación de pedidos\n",[377,1486,1487,1490,1493,1495,1498,1500],{"class":379,"line":565},[377,1488,1489],{"class":394},"        restaurant.",[377,1491,1492],{"class":390},"placeOrder",[377,1494,405],{"class":394},[377,1496,1497],{"class":383},"new",[377,1499,661],{"class":390},[377,1501,1502],{"class":394},"(Dish.PASTA));\n",[377,1504,1505,1507,1509,1511,1513,1515],{"class":379,"line":571},[377,1506,1489],{"class":394},[377,1508,1492],{"class":390},[377,1510,405],{"class":394},[377,1512,1497],{"class":383},[377,1514,661],{"class":390},[377,1516,1517],{"class":394},"(Dish.BURGER));\n",[377,1519,1520,1522,1524,1526,1528,1530],{"class":379,"line":585},[377,1521,1489],{"class":394},[377,1523,1492],{"class":390},[377,1525,405],{"class":394},[377,1527,1497],{"class":383},[377,1529,661],{"class":390},[377,1531,1532],{"class":394},"(Dish.SALAD));\n",[377,1534,1535,1537,1539,1541,1543,1545],{"class":379,"line":593},[377,1536,1489],{"class":394},[377,1538,1492],{"class":390},[377,1540,405],{"class":394},[377,1542,1497],{"class":383},[377,1544,661],{"class":390},[377,1546,1547],{"class":394},"(Dish.PIZZA));\n",[377,1549,1550],{"class":379,"line":598},[377,1551,562],{"class":394},[377,1553,1554],{"class":379,"line":603},[377,1555,640],{"class":394},[309,1557,1558],{},"En este ejemplo, hemos creado un sistema de pedidos para un restaurante utilizando Java. Los meseros colocan los pedidos en una cola, y los cocineros los toman y los preparan. La interfaz gráfica se puede mejorar para mostrar visualmente la cola de pedidos y el estado de cada cocinero, pero este código proporciona una base sólida para entender cómo funciona el sistema de pedidos en un restaurante.",[1560,1561,1562],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":373,"searchDepth":398,"depth":398,"links":1564},[1565,1566,1567,1568],{"id":306,"depth":398,"text":307},{"id":314,"depth":398,"text":315},{"id":321,"depth":398,"text":322},{"id":328,"depth":398,"text":329,"children":1569},[1570,1572,1574,1576,1578],{"id":363,"depth":421,"text":1571},"1. Enumerado Dish",{"id":643,"depth":421,"text":1573},"2. Clase Order",{"id":867,"depth":421,"text":1575},"3. Clase Cook",{"id":1150,"depth":421,"text":1577},"4. Clase Restaurant",{"id":1332,"depth":421,"text":1579},"5. Clase Main","En este ejemplo se muestra cómo un restaurante maneja los pedidos de los clientes utilizando un sistema de colas. Se explicará cómo se procesan los pedidos, cómo se asignan a los cocineros y cómo se asegura que los clientes reciban sus pedidos de manera eficiente.","md",null,{"editButton":104},{"icon":83},{"title":250,"description":1580},"YkIA3MpqDmG7r9LimZHmCPajmIOYGWZzdYS2oQbIWKw",[1588,1590],{"title":246,"path":247,"stem":248,"description":1589,"icon":83,"children":-1},"En este artículo se presentará un ejemplo práctico de cómo utilizar semáforos en Java para controlar el acceso a recursos compartidos en un entorno concurrente, evitando condiciones de carrera y garantizando la sincronización entre hilos.",{"title":254,"path":255,"stem":256,"description":1591,"children":-1},"Implementación de un proceso FIFO utilizando semáforos para controlar el acceso a un recurso compartido, con una interfaz gráfica en Swing.",1775101376379]