[Java并发编程]并发编程简介

并发编程简介

之所以在计算机中加入操作系统来实现多个程序的同时执行,只要是基于以下原因:

  1. 资源利用率

    在某些情况下,程序必须等待某个外部操作执行完成,例如输入操作或输出操作等,而在等待时程序无法执行其他任何工作。因此,如果在等待的同时可以运行另一个程序,那么无疑会提高资源的利用率。

  2. 公平性

    不同的用户和程序对于计算机上的资源有着同等的使用权。一种高效的运行方式是通过粗粒度的时间分片(Time Slicing)使这些用户和程序能共享计算机资源,而不是由一个程序从头运行到尾,然后再启动下一个程序。

  3. 便利性

    通常来说,在计算多个任务时,应该编写多个程序,每个程序执行一个任务并在必要时互相通信,这比只编写一个程序来计算所有任务更容易实现。

线程也被称为轻量级进程。在大多数现代操作系统中,都是以线程为基本的调度单位,而不是进程。如果没有明确的协调机制,那么线程将彼此独立执行。由于同一个进程中的所有线程都将共享进程的内存地址空间,因此这些线程都能访问相同的变量并在同一个堆上分配对象,这就需要实现一种比在进程间共享数据粒度更细的数据共享机制。如果没有明确的同步机制来协同对数据的访问,那么当一个线程正在使用某个变量时,另一个线程可能同时访问这个变量,这将造成不可预测的结果。

线程的优势

发挥多处理器的强大能力

建模的简单性

异步事件的简化处理

响应更灵敏的用户界面

线程带来的风险

安全性问题

在没有充足同步的情况下,多个线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果。

活跃性问题

与大多数并发性错误一样,导致活跃性问题的错误同样是难以分析的,因为它们依赖于不同线程的事件发生时序,因此在开发或者测试中并不总是能够重视。

性能问题

例如服务时间过长,响应不灵敏,吞吐量过低,资源消耗过高,或者可伸缩性较低等

《Java并发编程》读书笔记

你可能感兴趣的:(java,并发)