
java并发编程的艺术
lsm18829224913
每天对自己笑一笑,快乐是唯一的信仰。
展开
-
java并发编程的艺术-----第一章
这个写出来,纯属自娱自乐,以后还得再改正。什么是并发编程?并发编程目的是为了让程序运行的更快(也不是线程越多,越快,这里会遇到很多的问题,不如上下文切换问题,死锁的问题,以及受限于硬件和软件的资源限制) 上下文切换(任务从保存到再加载的过程)(类似于我们玩的单机游戏的存档,可以不同的人来玩一样)什么是上下文切换?是指CPU从一个进程或者线程切换到另一个进程或者线程剩下文切换的步骤?1 挂起一个进程...原创 2018-05-16 00:53:54 · 223 阅读 · 0 评论 -
java多线程系列--“JUC锁”03 公平锁
基本概念1AQS 指的 AbstractQueuedSynchronized 是java中管理锁的抽象类,锁的许多公共方法都是在这个类中实现的,AQS是独占锁和共享锁的公共父亲2AQS锁的类别01 独占锁 独占锁又被分为公平锁和非公平锁两种 公平锁是按照CLH等待线程先来先得的原则公平的获取锁,而非公平锁,则当线程要获取锁时,他会无视CLH等待队列而直接获取锁02 共享锁 能被...原创 2018-08-14 16:22:38 · 280 阅读 · 0 评论 -
java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
ReentrantLock介绍ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是 ReentrantLock锁,可以被单个线程对此获取ReentrantLock分为公平锁和非公平锁 他们的区别体现在获取锁的机制上是否公平。ReentrantLock是通过一个FIFO队列来管理获取该锁所有线程的,在"公平锁"的机制下,线程依次排队获取锁,而非公平锁是可获取状态时...原创 2018-08-14 14:22:13 · 157 阅读 · 0 评论 -
java多线程系列--“JUC锁”01之 框架
根据锁的添加和java中的时间java中的锁,可以分为"同步锁"和"JUC包中的锁"同步锁通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。 同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一个...原创 2018-08-14 14:05:06 · 221 阅读 · 0 评论 -
java多线程系列基础篇10-----线程优先级和守护线程
1 线程优先级的介绍java中的线程优先级的范围是1-10,默认的优先级是5。"高优先级线程"会优先于"低优先级线程"执行java中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别他们:如果返回false,则说明该线程是"用户线程";否则就是"守护线程"用户线程一般用户执行用户级任务,而守护线程也就是后台线程,一般用来执行后台任务,需要注意的是:java虚拟机在"...原创 2018-08-06 17:57:55 · 164 阅读 · 0 评论 -
java多线程系列基础篇09-----interrupt()和线程终止方式
1 interrup关于interrupt javajdk文档描述如下interrupt()的作用是中断本线程本线程中断自己是被允许的;其他线程调用本线程的interrupt()方法时,会通过checkAccess()检察权限,这有可能跑出SecurityException异常如果本线程是处于阻塞状态:调用线程的wait() wait(long,int) 会让它进入等待(阻塞)状态,或...原创 2018-08-06 16:32:55 · 161 阅读 · 0 评论 -
java多线程系列基础篇08-----join()
1 join介绍join()定义在Thread.java中join()的作用:让"主线程"等待"子线程"结束之后才能继续执行,下面看例子// 主线程public class Father extends Thread { public void run() { Son s = new Son(); s.start(); s.j...原创 2018-08-06 14:24:13 · 122 阅读 · 0 评论 -
java多线程系列基础篇07-----线程休眠
1 sleep()介绍sleep()定义在Thread.java中sleep()的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由阻塞状态变成就绪状态,从而等于cpu的调度执行2 sleep()示例package com.tuhu.filt.javadatasl...原创 2018-08-06 11:37:23 · 215 阅读 · 0 评论 -
java多线程系列基础篇06-----线程让步
1 yield()介绍yield()的作用是让步,他能让当前线程由"运行状态"到"就绪状态",从而让其他具有相同相同优先级的等待线程获取执行权,但是,并不能保证在当前线程调用yield()之后,其他具有相同优先级的线程就一定能获得执行权,也有可能又进入到"运行状态"继续运行"2yield()示例package com.tuhu.filt.javadatayield;public ...原创 2018-08-06 10:23:57 · 200 阅读 · 0 评论 -
java多线程系列基础篇05-----线程等待与唤醒
wait(),notify(),notifyAll()等方法介绍在Object.java中,定义了wait(),notify(),和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程,notify()是唤醒单个线程,而notifyAll()是唤...原创 2018-08-04 21:47:32 · 148 阅读 · 0 评论 -
java多线程系列基础篇03-----Thread中的start()和run()的区别
Thread类中的start()和run()的区别说明start():它的作用是启动一个新的线程,新线程会执行相应的run()方法,start()不能被重复调用run():run()就和普通的成员方法一样,可以被重复调用,单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程下面来代码说明一下package com.tuhu.filt.javadata;pu...原创 2018-08-04 20:26:07 · 197 阅读 · 0 评论 -
java多线程系列基础篇02-----实现多线程的两种方式
常用的实现多线程的两种方式 Thread 和 Runnable 为什么是常用的那,因为还可以通过juc包里面的线程池来实现多线程,Thread和Runnable简介Runnable 是一个接口 该接口中只包含了一个Run()方法 它的定义如下public interface Runnable { public abstract void run();}Runnable的...原创 2018-08-04 19:41:35 · 282 阅读 · 1 评论 -
java多线程系列基础篇01-----基本概念
JUC包指的是 java.utile.concurrent包 在java1.5添加到java中的线程共包括以下5种状态1 新建状态(New):线程对象被创建后,就进入了新建状态,例如 Thread thread = new Thread();2 就绪状态(Runnable):也被称为"可执行状态" 线程对象被创建后,其他线程调用了该对象的start()方法,从而启动该线程。例如,thr...原创 2018-08-04 18:37:08 · 216 阅读 · 1 评论 -
java多线程系列04-----synchronized关键字
1synchronized原理在java中每一个对象有且仅有一个同步锁,这也意味着同步锁是依赖对象而存在。当我们在调用对象的synchronized方法时,就获取了该对象的同步锁,例如synchronized(obj)就获取了"obj这个对象"的同步锁不同线程对同步锁的访问是互斥的,也就是说,在某个时间点,对象的同步锁只能被一个线程获取到!通过同步锁,我们可以实现对对象/方法的互斥访问...原创 2018-08-04 18:02:14 · 160 阅读 · 0 评论 -
并发编程------volatire和cas
原创 2018-07-28 19:03:07 · 217 阅读 · 0 评论 -
java多线程系列基础篇11-----线程优先级和守护线程
1 生产/消费者模型生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括"生产者","消费者","仓库"和"产品"他们之间的关系如下01 生产者仅仅在仓储未满时候生产,仓满则停止生产。02 消费者仅仅在仓储有产品的时候才能消费,仓空则等待03 当消费者发现仓储没产品的时候,会通知生产者生产04 生产者在生产出可消费产品的时候,应该通知等待的消费者去消费// Demo...原创 2018-08-07 10:30:18 · 169 阅读 · 0 评论