
thread
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
Java线程详解(1)-概念与原理
一、进程与线程 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间)。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,线程没有自己的...转载 2018-10-28 13:10:39 · 243 阅读 · 0 评论 -
Java线程详解(13)-锁
Java线程:新特征-锁(上) 在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。Condition将Object监视器方法(wait、notify和 notifyAll)...转载 2018-10-29 00:09:52 · 183 阅读 · 0 评论 -
Java线程详解(14)-信号量
Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资源可用。 因此,本人认为,这个信号量类如果能返回数目,还能知道哪些对象在等待,哪些资源可使用,就非常完美了,仅仅拿到这些...转载 2018-10-29 00:10:04 · 249 阅读 · 0 评论 -
Java线程详解(15)-阻塞队列和阻塞栈
Java线程:新特征-阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。 有了这样的功能,...转载 2018-10-29 00:10:13 · 439 阅读 · 0 评论 -
Java线程详解(16)-条件变量
条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化...转载 2018-10-29 00:10:23 · 337 阅读 · 0 评论 -
Java线程详解(17)-原子量
所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包java.util.concurre...翻译 2018-10-30 08:12:40 · 219 阅读 · 0 评论 -
Java线程详解(18)-障碍器
Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。 障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子:import java.util.concurrent.BrokenBarrierException; import java....转载 2018-10-30 08:12:55 · 209 阅读 · 0 评论 -
Java多线程可以分组,还能这样玩!
前面的文章,栈长和大家分享过多线程创建的3种方式《实现 Java 多线程的 3 种方式》。但如果线程很多的情况下,你知道如何对它们进行分组吗?和 Dubbo 的服务分组一样,Java 可以对相同性质的线程进行分组。来看下线程类 Thread 的所有构造方法。 如图所示,带有 ThreadGroup 的所有线程构造方法都可以定义线程组的。线程组使用 java.lang...转载 2018-11-11 09:27:42 · 783 阅读 · 0 评论 -
你应该知道的 volatile 关键字
前言不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。首先来看看为什么会出现这个关键字。 内存可见性由于 Java 内存模型( JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内...转载 2018-11-14 08:43:58 · 220 阅读 · 0 评论 -
Java线程详解(12)-有返回值的线程
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。现在Java终于有可返回值的任务(也可以叫做线程)了。 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到C...转载 2018-10-29 00:09:43 · 1165 阅读 · 0 评论 -
Java线程详解(11)-线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习...转载 2018-10-29 00:09:31 · 207 阅读 · 0 评论 -
Java线程详解(10)-volatile关键字
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。锁提供了两种主要特性:互...转载 2018-10-29 00:09:21 · 187 阅读 · 0 评论 -
Java线程详解(2)-创建与启动
一、定义线程1、扩展java.lang.Thread类。 此类中有个run()方法,应该注意其用法:public void run() 如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。 Thread的子类应该重写该方法。2、实现java.lang.Runn...转载 2018-10-28 13:15:26 · 196 阅读 · 0 评论 -
Java线程详解(3)-线程栈模型与线程的变量
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈的变化过程。 这幅图描述在代码执行到两个不同时刻1、2时候...转载 2018-10-28 13:18:47 · 221 阅读 · 0 评论 -
Java线程详解(4)-线程状态的转换
一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可以分为五大状态。用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回...转载 2018-10-28 13:23:12 · 223 阅读 · 0 评论 -
Java线程详解(5)-线程的同步与锁
一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。public class Foo { private int x = 100; public int getX() { retur...转载 2018-10-28 13:28:17 · 207 阅读 · 0 评论 -
Java线程详解(6)-线程的交互
线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习:void notify()——唤醒在此对象监视器上等待的单个线程。 void notifyAll()——唤醒在此对象监视器上等待的所有线程。 v...转载 2018-10-28 13:31:18 · 239 阅读 · 0 评论 -
Java线程详解(7)-线程的调度
Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休...转载 2018-10-28 13:36:51 · 270 阅读 · 0 评论 -
Java线程详解(8)-线程的同步
Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段。 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本部分之前,请参阅《Java线程:线程的同步与锁》部分...转载 2018-10-29 00:08:55 · 247 阅读 · 0 评论 -
Java线程详解(9)-并发协作
Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。 对于此模型,应该明确一下几点:生产者仅仅在仓储未满时候生产...转载 2018-10-29 00:09:09 · 249 阅读 · 0 评论 -
深入理解线程通信
前言开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。可以通过以下几种方式实现: 等待通知机制等待通知模式是 Java 中比较经典的线程通信方式。两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。如两个线程交替打印奇偶数:public cla...转载 2018-11-14 08:45:24 · 270 阅读 · 0 评论