Java并发——基础

       最以前,一个计算机只有一个cpu,同一时间只能执行一个程序。后来,出现了多任务处理(multitasking),计算机可以在同一时间执行多个程序。但是,这并不是真正的在同一时间发生,只是多个程序共享一个CPU,通过操作系统的管理,把CPU依次轮流地分配给各个应用使用。

        随着多任务处理的出现,软件开发人员也面临新的挑战。程序再也不能假定自己拥有所有的CPU时间,所有的内存已经其他资源。一个好的程序会在自己用完之后,释放所有的资源,这样,其他程序可以使用。

      但是,后来出现了多线程,这意味着你可以在同一个程序中执行多个线程。一个线程可以认为是一个CPU执行程序,当你在一个进程中执行多个线程时,就如同多个CPU执行同一个程序。

     多线程在提高某些程序性能方面,是一个很好的方法,但是,多线程比多任务更有挑战性。多个线程在同一个程序中运行,因此,可以同时读写同一个的内存。这会带来单线程程序不会出现的错误。这些错误不会在单一CPU机器上出现,因为连个线程不会真正的同时执行。现代计算机,有多核的CPU,甚至多个CPU,这意味着线程可以被不同的核或者CPU同时执行。

      如果一个线程读某一个内存地址时,别的线程正好在写这个内存地址,第一个线程会读到哪个值呢,旧的还是第二个线程刚写入的,还是两个的结合?或者,如果两个线程同时写某个内存地址,结束的时候,地址会是哪个值,第一个线程写入的,还是第二个线程写入的,还是两者的结合?

      没有合理的预防措施,任何的结果都有可能,甚至无法预料,结果可能每次都不同。因此,开发人员知道如何处理这些情况就变得很重要,意味着需要控制线程如何访问共享资源,例如内存,文件,数据库等。

     Java是最早一批可以让开发者容易使用多线程技术的语言之一。Java从最初就具备多线程能力。因此,Java开发者经常会面对上面描述的情况。多线程中遇到的问题和多任务系统或分布式系统中遇到的问题很像,比如同步问题,上下文切换开销,资源消耗等。虽然会带来很多问题,但多线程依然被使用,是由于它会带来很多好处,比如更优的利用资源,更简单的程序实现,更好的程序响应等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值