Java 并发/多线程教程(一)-阿里云开发者社区

开发者社区> steven.cao> 正文

Java 并发/多线程教程(一)

简介:          本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正!         在早期,计算机只有一个CPU,同一时刻只能执行一个程序,后来有了多任务的说法,多任务是指计算机在同一时刻可以执行多个程序,但这并不是真正意义上的同一时刻,单个CPU 被多个程序共用,操作系统会在运行的运行的程序间相互切换。
+关注继续查看

         本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正!

        在早期,计算机只有一个CPU,同一时刻只能执行一个程序,后来有了多任务的说法,多任务是指计算机在同一时刻可以执行多个程序,但这并不是真正意义上的同一时刻,单个CPU 被多个程序共用,操作系统会在运行的运行的程序间相互切换。在相互切换之前会短暂的执行其中的一个。

      随着多任务的产生,给程序开发人员带来了新的挑战。程序不能再假定拥有所有的CPU 时间,不能再假定它拥有所有的内存空间和计算机的其他资源。一段好的程序应该释放掉不再使用的资源,以至于其他程序能够使用这些资源。再此之后又出现了多线程,这意味着在同一程序中可以有多个线程执行,一个线程的执行可以认为一个CPU在执行这段程序,当有多个线程执行时可被视作多个CPU 在执行这个程序。

     多线程被视作可以提升程序性能的一种很好的方式,但是相对于多任务,多线程带来了更多的挑战。同一个程序内部多个线程同一时刻执行,这就意味着他们同时读写内存,这样就会出现在单线程下不会产生的错误,而这些错误不会出现在单CPU 的计算机上,因为在单CPU 的计算机上,同一时刻,多个线程并不是真的都在执行,现代计算机有多核,甚至于有些计算机拥有多CPU,这就意味着不同的线程可以同时被不同的核或是不同的CPU 执行。

1240
图片发自简书App

如果一个线程从内存区域读一个值的时候,另一个线程正在向内存区域写这个值的时候,那么读的线程最终会读到什么结果呢?原来的值?还是被另一个线程修改后的值呢?如果没有合适的保证措施,这些值都是有可能读到的。这种行为不可预知,结果可能随时都在变。因此,作为一个程序员,对正确对结果的预测是非常重要的!这就意味着程序员要学会怎么去控制线程对诸如内存、文件、数据库等这些共享资源的访问。

Java中的多线程和并发

  Java 是让程序员很容易实现多线程的语言之一。java 自从开始之初就有多线程的能力,因此java 开发人员经常面对上面所说的问题。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JAVA多线程高并发学习笔记(三)——Callable、Future和FutureTask
为什么要是用Callable和Future Runnable的局限性 Executor采用Runnable作为基本的表达形式,虽然Runnable的run方法能够写入日志,写入文件,写入数据库等操作,但是它不能返回一个值,或者抛出一个受检查的异常,有些需要返回值的需求就不能满足了。
1329 0
java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板
写锁降级为读锁,但读锁不可升级或降级为写锁。 锁降级是为了让当前线程感知到数据的变化。 1 //读写锁 2 private ReentrantReadWriteLock lock=new ReentrantReadWriteLock(); 3 //读锁 4 private ReadLock readLock=lock.
714 0
Java多线程高并发学习笔记——阻塞队列
在探讨可重入锁之后,接下来学习阻塞队列,这篇文章也是断断续续的写了很久,因为最近开始学ssm框架,准备做一个自己的小网站,后续可能更新自己写网站的技术分享。 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/superfj/p/7757876.html 阻塞队列是什么? 首先了解队列,队列是数据先进先出的一种数据结构。
939 0
Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition
锁的概念 从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock。 本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍ReentrantLock。
1072 0
Java多线程高并发学习笔记(一)——Thread&Runnable
进程与线程 首先来看百度百科关于进程的介绍: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
981 0
java多线程:jdk并发包的总结(转载)
转载地址:http://blog.csdn.net/yangbutao/article/details/8479520 1、java 高并发包所采用的几个机制(CAS,volatile,抽象队列同步)    CAS(乐观操作),jdk5以前采用synchronized,对共享区域进行同步操作,synchronized是重的操作,在高并发情况下,会引起线程频繁切换;而CAS是一种乐观锁机制,compare and swap,不加锁,而是假设没有冲突去完成,若有冲突会重试(非阻塞)。
1179 0
WebDriver多线程并发
要想多线程并发的运行WebDriver,必须同时满足2个条件,首先你的测试程序是多线程,其次需要用到Selenium Server。下载位置如下图:   下载下来后是一个jar包,需要在命令行中运行。
1138 0
Java 并发/多线程教程(二)-多线程的优点
        本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正!      尽管多线程有诸多的挑战,但是多线程被广泛使用的原因有以下几点: 1、对资源的充分利用。
827 0
Java 并发/多线程教程(五)-相同线程
       本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正!        相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统。
1186 0
Java 并发/多线程教程(七)-创建和启动java线程
      本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正! 创建和启动线程 在java中创建一个线程如下: Thread thread = new Thread(); 调用方法start()来启动一个线程: thread.start();         这个例子没有指定线程执行任何代码,线程将会在启动之后停止。
938 0
+关注
steven.cao
java,数据库,框架相关专家
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载