Java多线程之线程概述(一)

章节概览、

1、 前言

我们在学习java这门开发语言的时候,前期主要学习java语言的基础知识。入门的话主要学习的是面向对象的思想。在java的世界里,可以说万物皆对象。正是有了面向对象的思想。我们才设计出大量的高内聚低耦合的框架系统。这里有比较优秀的Spring全家桶,Hadoop全家桶等。这些优秀的框架,均在无数的大大小小的企业中使用。当然面向对象的设计理念,是java成功的重要一部分。其次,Java的另外一个重要的设计就是JVM。Java初期喊出的口号是:一次编译,到处运行的。这里就达到了平台的无关性。不管是windows,Linux,Mac等操作系统,均可以完成Java的运行。

Java平台的健壮性和稳定性,一直是众多企业青睐的首选开发语言。之所以能在当前众多的开发语言中脱颖而出,说明了Java一直跟随者时代的潮流和方向。比如现在如火如荼的微服务等。Java的健壮性和稳定性,能够让它在高并发的情况下,依旧能很高的达到企业生产的要求。这里主要的代表公司有阿里巴巴,美团等。


2、多线程

JVM我们通常称之为:Java虚拟机。所谓的虚拟机,是对真实存在的物理机系统进行模拟。所以Jvm具备操作系统的一些基本属性。当然这些属性也是java的重要组成部分。Java中多线程编程和网络编程即是对操作系统层面上的一种抽象。这里我们主要讲述多线程

Java多线程是对计算机操作系统多线程的高度抽象。当然其底层都是c++,c语言。在计算机操作系统中,进程,线程,线程切换,时间片轮询等,都是对程序运行的各种描述。在Java中,进程即是Jvm进程,主线程是我们启动的main()方法所对应的线程,子线程即是我们用户自己定义的各种线程。

所谓的多线程,即同一时刻,系统中运行着多个线程。多线程存在的意义是,更加充分的利用当前cpu资源。加速程序的运行。当然单核cpu也可以运行多线程,因为时间片用完了,就会存在线程上下文切换。


3、java多线程

Java多线程,主要通过Thread类进行封装。run方法里面写了线程的执行代码块,start方法开启线程运行。关于Thread的源码分析请参考:Java Thread类源码详解,Jvm线程模型请参考:JVM线程模型概述

我们刚开始学习多线程的时候,第一个使用的关键字是:synchronize关键字。通过synchronize关键字,可以实现线程的安全性,对共享资源的访问。synchronize是独占锁,同时也是悲观锁。默认认为所有的方法都是不安全的,都得加上synchronize进行同步。之后我们又学习了Object的wait/notify/notifyall等方法,学习了生产者消费者等多线程知识点。wait/notify/notifyall等方法也存在一些弊端。比如先唤醒,可能唤醒了不是指定唤醒的线程,因为其所有的等待线程都被放到同一个阻塞队列里。正式有了很多的弊端,所以出现了JUC这个并发包。

JUC并发包主要采用了CAS算法,实现了乐观锁的功能。默认情况下,所有的方法都是安全的,只有当存在竞争的时候,才会主动去竞争锁。这样大大减少了上下文切换和阻塞的次数。其实,他可以配合Condition实现wait/notify等功能,在此基础上,进行了进一步的优化。

专栏概述

为了更好的学习多线程,同时也为了自己能够更好的总结和学习,开启这个专栏,和大伙一起探讨学习多线程奥妙之处。专栏持久更新。如果不足的地方还请指出。本专栏主要分析JUC下面的核心源码,以及多线程一些设计模式和应用等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值