点击查看视频
如果有一天,你遇到这样一个问题:总票数固定,但是很多人都在卖这种票。这种情况下,我们怎么样才能保证票不被重复售卖?又该怎样去保证所有售出票的数量的准确?是不是已经发现,凭借当前所学所知似乎难以解决。现在,就来带你去探索多线程开发,解决这个问题!
在这里,你将通过15篇文章对Java多线程有一个初步且具体的认识,Thread、Runnable、Callable等开发标准为你指明多线程开发之路,synchronized关键字确保各线程有序调用,另外还介绍了其他各种方法来实现各式各样的操作,你将收获你先要的答案。
静看Java多线程之路如何直通罗马
传统的Dos是单进程处理的模式,而后来多进程的出现大大优化了电脑的处理速度。本节将引出Java多线程的概念。
【本节目标】
通过阅读本节内容,你将了解到进程与线程的关系,并了解到Java为了优化运行能力支持了多线程开发能力。
多线程,从start开始!
本节将为读者介绍多线程的实现方法与相关的注意事项,并指出了线程类中必须实现的run方法的作用。
【本节目标】
通过阅读本节内容,你将了解到继承Thread类并覆写run方法的具体要求,并能够通过实例化线程继承类调用start方法开启线程的过程中发生的变化。
看Runnable如何巧避单继承限制
上一节中介绍到通过继承Thread类实现多线程的方法,这样做同时也会受到Java单继承的限制。本节将介绍如何借助Runnable接口避开这个限制。
【本节目标】
通过阅读本节内容,你将了解到如何实现Runnable接口并结合Thread类完成多线程的实现,并学会简单的运用。
深入剖析Thread与Runnable关系
既然实现了Runnable的类能够传入Thread构造方法完成新的线程的生成,说明他们之间存在一定的联系,本节将为你揭晓此中奥秘。
【本节目标】
通过阅读本节内容,你将通过Thread类的定义及其具体代码发现它与Runnable的内在联系,对多线程的概念有更深入的理解。
进一步探索多线程的实现
Runnable接口中并没有提供返回一个值的功能,本节提到的Callable则对这一问题进行了解决。让我们一起来进一步探索多线程的运行吧。
【本节目标】
通过阅读本节内容,你将了解到Callable的相关功能及其实现方法,对Callable和Runnable之间的区别和联系有一定的认识,了解到多线程在正常运行中的各种状态和状态转变的时机,对多线程有更深入的理解。
线程起名,分工有序
本节为读者介绍了在使用线程功能的过程中分别为各个线程命名的好处以及常规开发中主线程与子线程的分工模式。
【本节目标】
通过阅读本节内容,你将学会通过线程命名实现对各个线程的准确控制,了解到线程的默认起名规则,并知晓main方法作为主线程处理总体逻辑,多个子线程分别处理各种复杂耗时的逻辑的开发模式。
教你随心操控线程状态
通过之前的学习我们可以启动一个线程,但还没办法干扰其运行过程。想知道如何手动控制线程的各种状态吗,本节将为你揭晓。
【本节目标】
通过阅读本节内容,你将学会使用sleep方法使线程休眠、使用interrupt方法强行中断线程,并掌握当线程被中断时处理中断异常的方法。
迅速读懂Java线程的交通规则
线程就像现实世界里复杂的交通线上运行的汽车,有停车让行的,也有一路高歌的,甚至还有特殊情况优先行驶的情况,本节将一一介绍这些内容。
【本节目标】
通过阅读本节内容,你将学会使用join方法让线程强制一直执行、使用yield方法礼让其他线程优先执行,了解并学会设置线程的优先级使系统自动调度资源执行线程。
使用同步解决多人卖票问题
本节先由多人合卖10张票为例,引出了线程同步问题,并结合实例代码讲解了同步机制的实现办法。
【本节目标】
通过阅读本节内容,你将了解到线程同步问题出现的原因,并学会使用synchronized关键字实现多个线程同时只有一个能进行调用的限制,解决线程同步问题。
同步的缺陷-死锁问题
在Java发展进程中,往往是为了解决一个或多个问题而提出新的解决办法,但伴随着新的内容的出现,也会出现新的问题。本节将为读者介绍同步机制带来的死锁问题。
【本节目标】
通过阅读本节内容,你将通过实际运行一段代码发现两个进程互相等待对方让出资源而造成死锁的问题,了解到此问题出现的原因并具有一定的避免此类问题的认识。
经典案例:生产者-消费者模型
本节将为读者介绍多线程开发领域中著名的案例-生产者-消费者操作,并指出这一操作在普通的实现过程中遇到的两个关键问题。
【本节目标】
通过阅读本节内容,你将初步了解生产者-消费者操作的内容,并能使用线程相关方法简单实现这个操作,初步了解到这一操作中的线程不同步问题与重复操作问题。
一文速解生产者-消费者模式问题
本节将结合具体实例,手把手带领读者解决上一节中提到的生产者-消费者操作中的两大问题。
【本节目标】
通过阅读本节内容,你将通过实操代码,进一步掌握synchronized关键字的使用方法,解决同步问题,学会使用Object类中提供的相关方法解决重复问题。
教你在停车前为线程配个“保镖”
众所周知,死锁是一种十分危险的情况,所以暴力型的线程停止操作被禁用了。为保证线程的流畅运行,本节将带着读者优雅地停止线程,并在线程运行路上安排守护线程。
【本节目标】
通过阅读本节内容,你将学会借助循环实现对线程的较为安全的停止操作,并学会创建守护线程,保证相关线程的平稳运行。
另类的“同步”-volatile关键字
本节将为读者展示另一种貌似能解决同步问题的关键字-volatile,并结合实际代码为读者深刻讲解了这个关键字的相关机制,剖析了它和synchronized的不同之处。
【本节目标】
通过阅读本节内容,你应当掌握volatile关键字的适用范围及其作用,认识到volatile关键字虽然使数据操作直接面向原始变量,使得变量完成一定意义上的同步,但仍无法替代synchronized的作用。
三则案例,助你掌握多线程
经历了前几节的学习,相信你已经对多线程有了自己的见解,现在,跟作者一起实操三则案例,助你快速消化所学知识吧!
【本节目标】
通过阅读本节内容,你将通过数字加减、生产电脑、竞争抢答三则案例的多线程相关逻辑实现,进一步掌握多线程开发的相关能力,对线程的各类操作更加得心应手。
更多Java开发者课程尽在→Java开发者