Java并发编程的原理、特点和实际运用场景

顺序编程指的是所有的事物都只能按照既定顺序执行一个步骤。在Java编程中,很大一部分内容,都是通过顺序编程来实现的。但是对于有些情景,使用并发编程,效果更好,这样就可以在同一时刻,并发执行应用程序中多个内容,而且还可以通过多处理器来执行。

并发编程有两个好处,一个是提高应用程序执行速度,一个是对于有些程序,可以提供方便易用的模型。

但是并发编程也有很多问题,并行任务很容易互相干扰,这就导致很多问题的出现,因此并发在实际运用中,具有不确定性。我们在实际编写代码过程中,往往觉得自己的代码能够正确的工作,但是在实际应用中,在一定的情况下,会出现很多问题。这些问题,往往不是在开发和测试阶段就能发现的,一般都是在客户使用过程中,才发现问题,而且是偶尔发生,个别问题还很难排查。

说到这里,大家可能觉察到并发编程很危险。其实Java 1.5已经对并发做了很多改善,但是在编译阶段,依然很难排查出并发问题,所以要想编写出好的并发程序,一定要多想,多研究,把各种可能出现的问题都想到,从而做出应对措施,这样才能减少并发问题的出现。

其实并发程序在现在的web程序中,应用的越来越多,比如servlet就具备天生的多线程特性, web服务器一般都是由多个服务器来支持,并发也是为了充分地运用多个处理器。

Java语言它天生就具备多线程特性,但是在日常工作中,很少能发现并发问题,在实际运用中,经常会发生系统崩溃,导致重要数据丢失,而且在多处理器环境中,这种问题还会更严重。

并发不止是Java语言的一部分,更是一套全新的概念,要想学好,就得多下功夫。

上面我们讲到,如果串行执行程序,速度会很慢,但是如果将程序切分为多个部分,每个部分在各自的处理器上面独自运行,这样速度会大幅提高。现在计算机速度的提升主要靠多核,所以充分利用多核处理器,才能使程序跑的更快。

一般web服务器都是多处理器,我们可以将用户请求分配到不同的线程中,然后就可以将这些请求转发到多个处理器中去处理。

一般来说,并发往往是用来提高单处理器性能。但是单处理器上面执行并发的开销要比顺序执行大很多,原因是来回切换任务,增加损耗。顺序执行如果遇到阻塞,就会导致程序无法继续支干线,后面的任务都会停止,如果用并发来做,就可以有效解决这个问题,一个任务阻塞,其他任务照常进行。

单处理器提高性能主要靠事件驱动编程。因为并发编程最重要的一个特点是它可以创建响应式界面。如果一个程序长期操作,就会忽略用户输入,变为不可响应。但是如果用并发,通过一个单独的线程来专门执行用户输入,这样才能及时响应。

在操作系统中,最常见的并发操作就是使用进程,一般操作系统会周期性进行进程切换,来实现多程序多进程,而且每个进程都是互相隔离的,不会彼此干预。但是Java并发编程会共享内存或者I/O等资源,所以Java多线程重要的是如何协调这些资源,防止出现多个线程同时访问一个资源,这就会造成死锁。

举个简单例子,我想备份一个文件,我需要在本地硬盘中备份了一份,然后在ftp上备份一份,然后在U盘里面备份一份,但是这几个操作如果按照顺序来执行,速度会很慢,但是我如果并行来执行这三个备份操作,速度会翻倍,而且这三个任务都在自己的地址空间中运行,互相不干扰,所以他们是独立的,不会有什么影响。

Java语言的聪明之处就是,它既有顺序性语言的特征,又提供了多线程来执行并发操作,Java语言是在jvm上面运行的,所以它的移植性非常好,既可以在不支持多任务的操作系统(如Macintosh)上面运行,又可以在支持并发的操作系统(如windows)上面运行。这样的特征,也使Java广泛运用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓凡学院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值