Sobre las excepciones, el tema más fundamental es el manejo de errores. Cada aplicación encuentra errores como descubrir que un archivo solicitado por un usuario no existe realmente, o que no se puede acceder a una página web porque no hay conexión de red, o que no hay un micrófono disponible para crear una grabación de audio, etc. A veces una aplicación puede recuperarse de un error y seguir proporcionando un comportamiento normal esperado, a veces los errores se informan al usuario, a veces se registran en un archivo, etc. Depende del error específico y de la aplicación.
Cada aplicación tiene que lidiar con los errores encontrados al tratar de hacer lo que el usuario quiere, y las excepciones son una estrategia común utilizada para burbujear errores de componentes en las capas de abstracción inferiores a componentes en las capas de abstracción superiores. Los dos enfoques alternativos básicos son:
- Error al pasar / verificar: ignorar los errores es el comportamiento predeterminado (si nadie los revisa), los errores burbujeantes de una capa inferior a una capa superior deben hacerse explícitamente.
- Lanzamiento / manejo de excepciones : las excepciones de burbujas de una capa inferior a una capa superior es el comportamiento predeterminado, las excepciones deben manejarse explícitamente (según corresponda) para evitar que la aplicación finalice abruptamente.
Sobre los hilos, los necesita porque las aplicaciones necesitan o desean realizar múltiples tareas en un momento dado. Esto podría ser porque
- Hay una gran cantidad de datos para procesar. Por ejemplo: desea que una imagen o un conjunto de imágenes se vean mejor aplicando un filtro (por ejemplo: filtro de valencia en instagram). La computadora en la que está trabajando tiene, digamos, 8 núcleos, por lo que puede dividir la cantidad total de trabajo entre 8 y asignar el trabajo a 8 hilos diferentes, para terminar 8 veces más rápido que si lo hiciera usando uno hilo único Advertencia, a menudo no puedes hacer que las cosas se aceleren tanto de manera tan limpia, pero cuando puedes, es genial.
- Diferentes tareas tienen diferentes requisitos de puntualidad. En la mayoría de los casos, se encuentra con esta división cuando su aplicación debe realizar tareas que deben realizarse de inmediato, en tiempo real (por ejemplo: actualizaciones de la interfaz de usuario para indicar el reconocimiento de una acción del usuario) y también tareas que tomarán una cantidad de tiempo impredecible y se puede realizar de forma asíncrona en segundo plano (por ejemplo: establecer una conexión a un servidor en algún lugar de Internet, solicitar y luego descargar un video) mientras la aplicación permanece receptiva.
Ninguno de mis ejemplos es específico de Java, pero se aplica a Java, así como a cualquier otro lenguaje que admita el manejo y el subprocesamiento de excepciones.