java事务原理
如何理解应用Java多线程与并发编程?
如何理解应用Java多线程与并发编程?
多线程:在了解线程之前,要先知道进程这个概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。简单点说,进程就是执行中的程序活动,是一个活动的实体。多进程,就好比同时打开了Word,Excel和Visio,他们都是不同的程序运行活动,即多个进程同时启动而已,这个概念比较好理解。线程,是一个执行中的程序活动(即进程)的多个执行路径,执行调度的单位。线程依托于进程存在,在进程之下,可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据。多线程,指在一个进程下有多个线程。各个线程执行自己的任务,这些线程可以”同时进行“(这里加了双引号,下面会讲述到加双引号的原因)。那多线程有什么好处?多线程应用在生活中随处可见,Word文档就是一个很好的例子。Word有“后台打印”的功能,用户点击打印按钮后,如果发现可以对当前文本进行修改,可以在打印过程中回到主界面进行修改、保存等操作。 如果没有应用多线程,不妨假设用户要打印的文本很长很长,那么用户要等打印操作执行完后,才可以对文本进行修改编辑保存等,这样用户体验就不如多线程的好。还有迅雷,有没有发现迅雷是可以同时下载东西的?例如同时下载A,B,A下载进度到53.4%,B下载进度到47.1%,有时A速度快些,有时B速度快些,反正能确定的是A,B都在下载内容,而不是一定要等A下载完后,B才可以开始下载,这也是多线程的作用。因此,多线程强调”同时,一起进行“,而不是单一的顺下操作。
并发:Concurrency,是并发的意思。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。微观角度:所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。宏观角度:多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。通俗点讲,并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中B,C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二个阶段只有B在执行,第三个阶段只有C在执行。其实,并发过程中,A,B,C并不是同时在进行的(微观角度)。但又是同时进行的(宏观角度)。
并行:Parallelism,即并行,指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源呢上(多核),同时执行。并行,不存在像并发那样竞争,等待的概念。图中,A,B,C都在同时运行(微观,宏观)。
通过多线程实现并发,并行:java中的Thread类定义了多线程,通过多线程可以实现并发或并行。在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。至于多线程实现的是并发还是并行?上面所说,所写多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,如果有人问我我所写的多线程是并发还是并行的?我会说,都有可能。不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。
JAVA程序员还能卷到什么程度?
只要从业人员一直增加下去,就会一直卷下去。
说到底,还是用人单位可选择性太大导致的,其实不单单是Java,就算招人放牛喂猪,一旦面试的人多了,雇主也会挑啊。
四肢健全里挑壮的,肌肉发达里挑看起来顺眼的,你说这些对于喂猪来说有没有用?说有也行,说没有也没毛病,面试找工作也一样。
换个角度想想,大家都是出来卖的(哈哈,我说的是卖时间技术哦),凭啥boss舍别人而选你呢?换位思考,总得有个理由不是?
人之常情,也是事物正常发展趋势。
想要不被淘汰,只有不断努力,不断学习,不断提升自己。
加油,共勉[呲牙]