Java多线程
文章平均质量分 88
瘦子没有夏天
大家好,我是Leon。一个专业与Java领域的程序员,偶尔理理财。欢迎大家来阅读我博客,如果你发现极个别文章和书籍内容雷同,请叫我勤奋的code搬运工٩(๑❛ᴗ❛๑)۶。我的邮箱:gyoomi0709@foxmail.com
展开
-
Java多线程8:wait()和notify()/notifyAll()
轮询线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了通信,B线程不断通过轮训来检测i == 10000这个条件。这样可以实现我们的需求,但是也带来了问题:CPU把资源浪费了B...转载 2018-05-09 10:14:50 · 171 阅读 · 0 评论 -
Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
转自:http://www.cnblogs.com/xrq730/p/4869671.html前言在多线程环境下,JDK给开发者提供了许多的组件供用户使用(主要在java.util.concurrent下),使得用户不需要再去关心在具体场景下要如何写出同时兼顾线程安全性与高效率的代码。之前讲过的线程池、BlockingQueue都是在java.util.concurrent下的组件,Timer虽然...转载 2018-05-11 11:46:21 · 244 阅读 · 0 评论 -
Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask
转自:http://www.cnblogs.com/xrq730/p/4872722.htmlCyclicBarrier接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier。CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到所有线程都达到了这个屏障时,再一起继续执行后面的动作。看一下CyclicBarrier的使用实例:publi...转载 2018-05-11 15:48:43 · 180 阅读 · 0 评论 -
Java多线程1:进程和线程概述
转自:http://www.cnblogs.com/xrq730/p/4850883.html进程和线程谈到多线程,就得先讲进程和线程的概念。进程进程可以理解为受操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的".exe"都可以理解为一个进程线程进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很多子任务在运行,比如聊天线程、好友视频线程、...转载 2018-05-07 17:58:07 · 176 阅读 · 0 评论 -
Java多线程2:Thread中的实例方法
转自:http://www.cnblogs.com/xrq730/p/4851233.htmlThread类中的方法调用方式:学习Thread类中的方法是学习多线程的第一步。在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别:1、this.XXX()这种调用方式表示的线程是线程实例本身2、Thread.currentThread.XXX...转载 2018-05-07 17:59:52 · 172 阅读 · 0 评论 -
Java多线程3:Thread中的静态方法
转自:http://www.cnblogs.com/xrq730/p/4851344.htmlThread类中的静态方法Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程"。为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作。下面来看一下Thread类中的静态方法:1、currentThread()currentThread()方法返回的是对...转载 2018-05-07 18:00:58 · 384 阅读 · 0 评论 -
Java多线程4:synchronized锁机制
转自:http://www.cnblogs.com/xrq730/p/4851350.html脏读一个常见的概念。在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的。 多线程线程安全问题示例看一段代码:public class ThreadDomain13{ private in...转载 2018-05-07 18:02:15 · 198 阅读 · 0 评论 -
Java多线程5:synchronized锁方法块
转自:http://www.cnblogs.com/xrq730/p/4851530.htmlsynchronized同步代码块用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子:public class ThreadDomain...转载 2018-05-08 14:27:49 · 136 阅读 · 0 评论 -
Java多线程6:synchronized锁定类方法、volatile关键字及其他
转自:http://www.cnblogs.com/xrq730/p/4853578.html同步静态方法synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法:public class ThreadDomain25{ public synchronized static v...转载 2018-05-08 14:28:59 · 159 阅读 · 0 评论 -
Java多线程19:定时器Timer
转自:http://www.cnblogs.com/xrq730/p/4856985.html前言定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单、定时更新某些缓存、定时清理一批不活跃用户等等。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程方式进行处理,所以它和多线程技术关联还是相当大的。那和ThreadLocal一样...转载 2018-05-11 11:44:52 · 222 阅读 · 0 评论 -
Java多线程18:线程池
转自:http://www.cnblogs.com/xrq730/p/4856453.html使用线程池与不使用线程池的差别先来看一下使用线程池与不使用线程池的差别,第一段代码是使用线程池的:public static void main(String[] args){ long startTime = System.currentTimeMillis(); final List...转载 2018-05-11 11:43:43 · 202 阅读 · 0 评论 -
Java多线程17:中断机制
转自:http://www.cnblogs.com/xrq730/p/4856361.html概述之前讲解Thread类中方法的时候,interrupt()、interrupted()、isInterrupted()三个方法没有讲得很清楚,只是提了一下。现在把这三个方法同一放到这里来讲,因为这三个方法都涉及到多线程的一个知识点----中断机制。Java没有提供一种安全、直接的方法来停止某个线程,而...转载 2018-05-11 11:42:35 · 215 阅读 · 0 评论 -
Java多线程9:ThreadLocal源码剖析
转自:http://www.cnblogs.com/xrq730/p/4854813.htmlThreadLocal源码剖析ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。 三个理论基础在剖析ThreadLo...转载 2018-05-09 10:16:31 · 198 阅读 · 0 评论 -
Java多线程10:ThreadLocal的作用及使用
转自:http://www.cnblogs.com/xrq730/p/4854820.htmlThreadLocal的作用从上一篇对于ThreadLocal的分析来看,可以得出结论:ThreadLocal不是用来解决共享对象的多线程访问问题的,通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象,其他线程不需要去访问...转载 2018-05-09 10:17:59 · 196 阅读 · 0 评论 -
Java多线程11:ReentrantLock的使用和Condition
转自:ReentrantLockReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock基本用法先来看一下ReentrantLock的基本用法:public class ThreadDomain38{ private Lock lock = new Reentra...转载 2018-05-09 16:19:01 · 175 阅读 · 0 评论 -
Java多线程12:ReentrantLock中的方法
转自:http://www.cnblogs.com/xrq730/p/4855538.html公平锁与非公平锁ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁。非公平锁的方式...转载 2018-05-09 16:20:06 · 162 阅读 · 0 评论 -
Java多线程13:读写锁和两种同步方式的对比
转自:http://www.cnblogs.com/xrq730/p/4855631.html读写锁ReentrantReadWriteLock概述大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低。所以在JDK中提供了一种读写锁ReentrantReadWriteLock,使用它可以加...转载 2018-05-09 16:21:34 · 160 阅读 · 0 评论 -
Java多线程14:生产者/消费者模型
转自:http://www.cnblogs.com/xrq730/p/4855663.html什么是生产者/消费者模型一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点:生产者生产的时候消费者不能消费消费者消费的时候生产者不能生产缓冲区空时消费者不能消费缓冲区满时生产者不能生产...转载 2018-05-10 14:14:59 · 191 阅读 · 0 评论 -
Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型
转自:http://www.cnblogs.com/xrq730/p/4855857.htmlQueue是什么队列,是一种数据结构。除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的。无论使用哪种排序方式,队列的头都是调用remove()或poll()移除元素的。在FIFO队列中,所有新元素都插入队列的末尾。 Queue中的方法Queue中的方法不难理解,6个...转载 2018-05-10 14:16:04 · 214 阅读 · 0 评论 -
Java多线程16:线程组
转自:http://www.cnblogs.com/xrq730/p/4856072.html线程组可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。 线程关联线程组:1级关联所谓1级关联就是父对象中有子对象,但并不创建孙对象。这种情...转载 2018-05-10 14:17:48 · 160 阅读 · 0 评论 -
Java多线程7:死锁
转自:http://www.cnblogs.com/xrq730/p/4853713.html前言死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在...转载 2018-05-08 14:30:04 · 173 阅读 · 0 评论