Java7并发示例集110:线程组
对线程分组是Java并发API提供的一个有趣功能。我们可以将一组线程看成一个独立单元,并且可以随意操纵线程组中的线程对象。比如,可以控制一组线程来运行同样的任务,无需关心有多少线程还在运行,还可以使用一次中断调用中断所有线程的执行。
Java提供了ThreadGroup
类来控制一个线程组。一个线程组可以通过线程对象来创建,也可以由其他线程组来创建,生成一个树形结构的线程。
根据《Effective Java》的说明, 阅读全文…
对线程分组是Java并发API提供的一个有趣功能。我们可以将一组线程看成一个独立单元,并且可以随意操纵线程组中的线程对象。比如,可以控制一组线程来运行同样的任务,无需关心有多少线程还在运行,还可以使用一次中断调用中断所有线程的执行。
Java提供了ThreadGroup
类来控制一个线程组。一个线程组可以通过线程对象来创建,也可以由其他线程组来创建,生成一个树形结构的线程。
根据《Effective Java》的说明, 阅读全文…
昨天D瓜哥参加了一个Java工程师面试,具体公司名称就不透露了。感觉被问的问题挺有代表性。简单整理一下,发布出来,给需要的朋友一个参考吧。暂时没有解答,抱歉!
以前工作中收获最大的一次经历是什么?
这里只说明一下收获吧。
所需知识哪些 阅读全文…
最近在搞MySQL 5.6帮助手册的翻译。由于好多人都是DBA,没有接触过HTML,并且对Markdown也不熟悉,再加上需要统计一下大家在翻译中对链接和锚点的处理。所以,专门录制了一个视频来做讲解。现在已经发布出来,希望对有这方面需求的朋友有所帮助。
视频如下: 阅读全文…
D瓜哥已经给大家分享了两批多看邀请码,再给大家分享一批。
后来,无意间发现多看还有邀请码。我让我朋友使用邀请码注册成了多看用户,可以免费获得一本书。觉得不错,今天就把我买过的书的邀请码整理出来,给大家分享一下,大家也可以使用这些邀请码注册多看,免费获得一本好书。哈哈
当然,我承认我有私心:使用这些邀请码注册成功后,你首次成功购买多看精品书,同时我也可以获赠这本书。我为人人,人人为我,好书一起读,友情1+1!何乐而不为呢?哈哈
共享数据是并发程序最关键的特性之一。对于无论是继承Thread
类的对象,还是实现Runnable
接口的对象,这都是一个非常周重要的方面。
如果创建了一个实现Runnable
接口的类的对象,并使用该对象启动了一系列的线程,则所有这些线程共享相同的属性。换句话说,如果一个线程修改了一个属性,则其余所有线程都会受此改变的影响。
有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享。Java并发接口提供了一种很清晰的机制来满足此需求,该机制称为本地线程变量。该机制的性能也非常可观。
按照下面所示步骤, 阅读全文…
Java语言中,把异常分为两类:
throws
子句中被显式抛出或者在方法内被捕获。例如,IOException
异常或ClassNotFoundException
异常。NumberFormatException
异常。当一个受检异常在Thread
对象的run()
方法中被抛出时,我们必须捕获并处理它,因为run()
方法不能抛出异常。而一个非受检异常在Thread
对象的run()
方法中被抛出时,默认的行为是在控制台打印出堆栈跟踪信息然后退出程序。
幸运的是,Java为我们提供了一种机制, 阅读全文…
Java有一种特殊线程,守护线程,这种线程优先级特别低,只有在同一程序中的其他线程不执行时才会执行。
由于守护线程拥有这些特性,所以,一般用为为程序中的普通线程(也称为用户线程)提供服务。它们一般会有一个无限循环,或用于等待请求服务,或用于执行任务等。它们不可以做任何重要的工作,因为我们不确定他们什么时才能分配到CPU运行时间,而且当没有其他线程执行时,它们就会自动终止。这类线程的一个典型应用就是Java的垃圾回收。
在本节示例中,我们将创建 阅读全文…
一直以来,对Hadoop集群很感兴趣。最近得闲,就抽空把Hadoop集群搭建起来。为了日后备查,著一小文以记之。
为了便于管理,建立一个专门用于搭建Hadoop集群的用户账号。创建指令如下:
sudo adduser u --ingroup sudo
注销原来的登录用户,使用用户u
登录。也可以使用 阅读全文…
在某些场景下,我们必须等待线程执行完成才能进行下一步工作。例如,某些程序在开始执行之前,需要先初始化一些资源。这时,我们可以启动一个线程专门来做初始化任务,等到线程任务完成后,再去执行其他部分。
为此,Thread
类为我们提供了join()
方法。当我们使用线程对象调用此方法时,正在掉调用的线程对象将被推迟到被调用对象执行完成后再开始执行。
在本节,示例程序演示等待初始化方法完成后,再去执行其他任务。
按照下面所示步骤, 阅读全文…
有时,我们需要在指定的时间点中断正在执行的线程。比如,每分钟检查一次传感器状态的线程,其余时间,线程不需要做任何事情。在此期间,线程不需要使用计算机的任何资源。过了这段时间之后,并且当Java虚拟机调度了该线程,则该线程继续执行。为此,你可以使用Thread
类的sleeep()
方法。该方法以休眠的方式来推迟线程的执行,而且整数类型的参数则指明休眠的毫秒数。当调用sleep()
方法,休眠时间结束后,Java虚拟机分配给线程CPU运行时间,线程就会继续执行。
另一种是用sleep()
方法的方式是 阅读全文…