在过去,计算机只有一个CPU,并且一次只能执行一个程序。后来出现了多任务处理,这意味着计算机可以同时执行多个程序(AKA任务或进程)。但它并不是“同时”.单个CPU在程序之间共享。操作系统将在运行的程序之间切换,在切换之前执行它们一段时间。
随着多任务处理为软件开发人员带来了新的挑战。程序不能再假定所有CPU时间都可用,也不能假定所有内存或任何其他计算机资源。一个“好公民”计划应该释放它不再使用的所有资源,所以其他计划可以使用它们。
后来又出现了多线程,这意味着你可以在同一个程序中执行多个线程。执行线程可以被认为是执行程序的CPU.当你有多个线程执行相同的程序时,就像在同一个程序中执行多个CPU一样。
多线程可以是提高某些类型程序性能的好方法。然而,多线程比多任务更具挑战性。线程在同一个程序中执行,因此可以同时读取和写入相同的内存。这可能导致在单线程程序中看不到的错误。单CPU机器上可能看不到某些这些错误,因为两个线程从未真正“同时”执行。现代计算机虽然配备了多核CPU,甚至还配备了多个CPU.这意味着单独的线程可以由不同的核心或CPU同时执行。
如果一个线程在另一个线程写入时读取一个内存位置,那么第一个线程最终会读取什么值? 旧的价值? 由第二个线程写入的值? 或者是两者之间的混合值? 或者,如果两个线程同时写入同一个内存位置,它们会是什么值? 由第一个线程写入的值? 由第二个线程写入的值? 或者这两个值的组合?
没有适当的预防措施,任何这些结果都是可能的。 这种行为是不可预测的。 结果可能会不时变化。 因此,作为开发人员知道如何处理正确的预防措施非常重要 - 例如访问共享资源,如内存,文件,数据库等。这是Java并发教程地址之一。
Java中的多线程和并发性
Java是开发人员易于使用多线程的第一种语言之一。 Java从一开始就具有多线程功能。因此,Java开发人员经常遇到上述问题。这就是我在Java并发上编写这个线索的原因。就像我自己和任何可能从中受益的Java开发人员一样。
该线索将主要关注Java中的多线程,但多线程中出现的一些问题与多任务和分布式系统中出现的问题类似。因此,对于多任务和分布式系统的参考也可能发生在这条路上。因此,“并发”而不是“多线程”.
更多烟台培训相关资讯,请扫描下方二维码