- 博客(8)
- 收藏
- 关注
原创 Java并发编程(七)终结线程
线程的状态一个线程会有如下五个状态1.新建:线程在被创建时会暂时处于这种状态,此时系统为线程分配资源并对其进行初始化2.就绪:此时线程已经可以运行,只是系统没有为其分配CPU时间。3.运行:系统为线程分配了CPU时间,线程处于运行状态4.阻塞:线程由于等待I/O等原因无法继续运行,等待结束后就又进入就绪状态了,阻塞时系统不会再为其分配CPU时间。5.死亡:线程执行完所有的代码,此时线程不不可以再调...
2018-05-29 22:19:00 191
原创 Java并发编程(六)原子性与易变性
原子性原子是最小单元、不可再分的意思。原子性是指某个操作在获取CPU时间时,要么就给它足够时间,让这个操作执行完,要么就不执行这个操作,执行时不能出现上下文切换(把CPU时间从一个线程分配到另一个线程)。Java中对变量的读取和赋值都是原子操作,但long、double类型除外,只有使用volatile修饰之后long、double类型的读取和赋值操作才具有原子性。除此之外Java还提供了几个常用...
2018-05-27 09:01:47 717
原创 Java并发编程(五)锁的使用(下)
显式锁 上篇讲了使用synchronized关键字来定义锁,其实Java除了使用这个关键字外还可以使用Lock接口及其实现的子类来定义锁,ReentrantLock类是Lock接口的一个实现,Reentrant是“重入”的意思,因此这个锁也是支持重入的,这里就不再测试它的重入性了,感兴趣的同学可以自行测试。这种方式是Java在jdk1.5才引入进来的功能,它的功能比synchron...
2018-05-23 20:18:14 159
原创 Java并发编程(四)锁的使用(上)
锁的作用 锁是一种线程同步机制,用于实现互斥,当线程占用一个对象锁的时候,其它线程如果也想使用这个对象锁就需要排队。如果不使用对象锁,不同的线程同时操作一个变量的时候,有可能导致错误。让我们做一个测试:class Entity { public int value = 0;}class IncreaseThread implements Runnable { @Overrid...
2018-05-13 21:20:53 204
原创 Java并发编程(三)什么是线程池
什么是线程池 学习编程的小伙伴们会经常听到“线程池”、“连接池”这类的词语,可是到底“池”是什么意思呢?我讲个故事大家就理解了:在很久很久以前有一家银行,一年之中只有一个客户来办理业务,随着时间的推移,办理业务的人数每年都增加五千。20年之后这家银行办理业务的人次已经到十万。最开始只有一个客户的时候银行只需要雇佣一个按办理业务次数计工资的临时工就行了,办完业务就解雇。随着办理业务的人不断增多,银...
2018-05-07 19:36:54 159
原创 Java并发编程(二)创建线程的三种方法
进程与线程1. 进程 进程和代码之间的关系就像音乐和乐谱之间的关系一样,演奏结束的时候音乐就不存在了但乐谱还在;程序执行结束的时候进程就消失了但代码还在,而计算机就是代码的演奏家。2. 线程 线程可以比喻成演奏过程中的某一种乐器的声音,乐器声音的种类可以很少,但是不能一个都没有——一个进程至少包含一个线程。线程是程序执行的核心,就像没有了具体乐器的声音就没有了音乐一样。创建线程的三种方式1....
2018-05-03 19:24:59 101
原创 Java并发编程(一)为什么要并发
并发所带来的好处1. 并发在某些情况(并不是所有情况)下可以带来性能上的提升1) 提升对CPU的使用效率 提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了CPU的使用效率。 提升访问I/O时CPU的利用率:当一个线程要在网上下载一些东西的时候,这个线程将处于阻塞状态...
2018-05-02 19:41:17 174
原创 并发与并行的区别
只有当CPU至少有两个核心的时候才有可能并行,而能不能并发与CPU的核心数无关,单核CPU也可以实现并发。 并行是一种并发的特殊情况,并行要求必须是时间上的同时,而并发只要求逻辑上同时就可以。 举个例子:大学的时候学生都会对老师的讲课质量做一个评价(虽然没什么卵用),老师也会给学生一个成绩。要想使评价尽可能的公平,二者的评价就要同时完成,这个同时强调的就是逻辑上的同时。学生在期...
2018-05-02 19:37:06 225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人