摘要:ThreadGroup初识: 这次来学习一个新的线程概念 线程组(ThreadGroup),首先从JDK文档中对它进行一个大致的了解,如下: 下面开始用代码来进行说明,对于一个线程来说如果没有指定其线程组,那它就属于当前线程所属的线程组,对于main()方法中的当前线程我们知道是main线程,那它的
阅读全文
摘要:对于友盟统计我想搞程序的应该无人不晓,其中对于里面用得最多的功能就是对线上的崩溃进行修复,而这些异常都是运行期的,如: 其实也就是可以对线程中出现了这种运行期异常是提供有一种捕获机制对其进行统一处理,所以这里来剖析一下其原理,先制造一个异常: 编译运行: 如果是在app中出现这种异常那直接整个app
阅读全文
摘要:这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这里有实验的,下面开始,因为这个实验用shell命令演示会比较方便,所以建议实验是在linux、mac
阅读全文
摘要:拋出synchronized问题: 对于一个方法上了同锁如果被一个线程占有了,而假如该线程长时间工作,那其它线程不就只能傻傻的等着,而且是无限的等这线程工作完成了才能执行自己的任务,这里来演示一下这种场景: 上面代码就是开启了两个线程,执行顺序有先后,分别执行这个同步方法,看下结果: 对于线程的中止
阅读全文
摘要:基于上一次【http://www.cnblogs.com/webor2006/p/8909558.html】学习的多个生产者与多个消费者模型,此次用另外一个案例来进一步巩固线程之间的调度处理,这里还是以之前【http://www.cnblogs.com/webor2006/p/7895410.htm
阅读全文
摘要:对于wait和sleep貌似都会阻塞线程,但是它们确实是很大的区别的,所以下面一点点来探讨: 区别一、Sleep()是线程里面的方法,而Wait()是Object类的方法。这个比较简单,直接看代码便知: 区别二、sleep()方法不需要被notify唤醒,而wait()则需要【当然wait(10)这
阅读全文
摘要:在上一次【http://www.cnblogs.com/webor2006/p/8419565.html】中演示了多Product多Consumer假死的情况,这次解决假死的情况来实现一个真正的多线程下的生产者消费者模型,在解决之前来看一下wait()和notify()的官方文档,因为假死的原因就跟
阅读全文
摘要:在上一次中已经实现一个生产者与消费者的初步模型(http://www.cnblogs.com/webor2006/p/8413286.html),但是当时只是一个生产者对应一个消费者,先贴下代码: 而实际生产者消费者模型应该是多对多的,所以接下来将其改造一下: 首先将生产者改成多个,这里采用Java
阅读全文
摘要:之前已经对于线程同步相关的知识点进行了详细的学习,这次来学习一下线程间的通信相关的知识,话不多说直接用代码进行演练,以一个简陋的生产者消费者模型来初步了解下线程间通信是怎么一回事。 生产消费者第一版: 然后具体实现生产消费方法: 此时用两个线程来应用一下: 这时看一下运行结果: 对于一个生产者与一个
阅读全文
摘要:之前已经学习了关于同步锁的知识,但是在实际编写多线程程序时可能会存在死锁的情况,所以这次来模拟一下死锁,并且学会用一个命令来确认是否程序已经出现死锁了,下面开始: 首先新建两个类: 此时当然得到OtherService类中增加这个s1()方法喽,如下: 目前是DeadLock调用了OtherServ
阅读全文
摘要:This锁: 关于什么是This锁下面用实现来说明一下它: 那下面用两个线程分别调用这两个方法,如下: 看结果: 可见两个方法是同时输出的,因为m2()方法并未上锁,所以就不存在争锁的问题,那这时给m2()方法也加上同步锁,如下: 那此时两个线程调用的m1()、m2()方法能同时执行么,看结果: 很
阅读全文
摘要:在上一次中【http://www.cnblogs.com/webor2006/p/8040369.html】采用同步代码块的方式来实现对线程的同步,如下: 对于同步方法我想都知道,就是将同步关键字声明在方法上滴,那如果改用这种同步方式会怎样呢?下面实验下: 编译运行: 发现全被一号窗口执行了,另外两
阅读全文
摘要:对于多线程编程而言其实老生成谈的就是数据同步问题,接下来就会开始接触这块的东东,比较麻烦,但是也是非常重要,所以按部就班的一点点去专研它,下面开始。 数据同步引入: 这里用之前写过的银行叫号的功能做为数据同步知识的引入,具体可以查看: http://www.cnblogs.com/webor2006
阅读全文
摘要:上篇中在最后抛出一个问题,具体问题可以查看此篇【http://www.cnblogs.com/webor2006/p/7995229.html】,这里不再概述,其实要实现这个需求可以用咱们之前学习的守护线程来解决,守护的场景跟我们想要的需求也很类似啦,下面看下如何来实现这样的目标: 首先新建一个类用
阅读全文
摘要:Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这时由于它没有捕获这个中断,在捕获中断之前先看一下官方对于interrupt()的一些说明: 那难道在
阅读全文
摘要:关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下。 首先先观察下JDK对它的介绍: 其实就是等待一个线程结束,对它记忆中还是有印象的,下面实践一下: 这时很显然打印是交替进行的: 那如果我
阅读全文
摘要:这里学习Thread的两个比较简单的API,直接上代码: 线程ID: 那它的生成规则是?直接看源码: 那为什么目前打印是9呢?然后在jvm启动的时候就已经创建了8个线程?继续用jconsole来验证一下: 启动jconsole: 优先级: 我们在学习java线程中都知道这个优先级在实际中是不受控的,
阅读全文
摘要:daemon线程既守护线程,而在jdk中对于Thread中针对守护线程有专门的API,如下: 而之前在公司项目中就看到过有人使用过Thread中的这个API,但是对于它的使用场景完全不知,所以这次好好的学习一下,下面直接上代码来阐述它。 编译运行: 很简单,但是这里可以看到在main函数执行完成之后
阅读全文
摘要:继续学习一下Thread的构造函数,在上次【http://www.cnblogs.com/webor2006/p/7760422.html】已经对如下构造都已经学习过了: 多线程与JVM内存结构的关系【了解】: 对于最后一个有疑问的构造中stackSize参数,其实学过编程滴人从参数字面就比较容易理
阅读全文
摘要:关于Thread的构造在JDK文档中如下: 之后会把上面所有的构造都会学习到,这次主要是去研究一下图上标红的默认构造,当然大家肯定对于它都有些不屑,这有啥可学的,不new一个然后start线程不就启动了,属于线程最最基础的东东,然后它的背后并非我们都知道,所以下面开始学习。 Thread常规知识:
阅读全文