摘要: Java为开发提供了很多有用的工具类,这些工具类可以帮助我们更加高效的编写并发程序,本篇我们将介绍这些实用工具的用法。 ThreadLocal ThreadLocal类用于解决多线程共享一个变量的问题,当多线程访问同一个变量时可能会导致结果的错误,防止这种错误第一种办法就是使用锁来保护对象;第二种方 阅读全文
posted @ 2018-06-24 14:06 今日说码 阅读(389) 评论(0) 推荐(0) 编辑
摘要: 哲学家进餐问题 并发执行带来的最棘手的问题莫过于死锁了,死锁问题中最经典的案例就是哲学家进餐问题:5个哲学家坐在一个桌子上,桌子上有5根筷子,每个哲学家的左手边和右手边各有一根筷子。示意图如下: 哲学家进餐问题 并发执行带来的最棘手的问题莫过于死锁了,死锁问题中最经典的案例就是哲学家进餐问题:5个哲 阅读全文
posted @ 2018-06-24 11:50 今日说码 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 上篇我们讲了使用wait()和notify()使线程间实现合作,这种方式很直接也很灵活,但是使用之前需要获取对象的锁,notify()调用的次数如果小于等待线程的数量就会导致有的线程会一直等待下去。这篇我们讲多线程间接协作的方式,阻塞队列和管道通讯,间接协作的优点是使用起来更简单并且不易出错。 阻塞 阅读全文
posted @ 2018-06-23 20:11 今日说码 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 多线程并发执行时,不同的线程执行的内容之间可能存在一些依赖关系,比如线程一执行a()方法和c()方法,线程二执行b()方法,方法a()必须在方法b()之前执行,而方法c()必须在方法b()之后执行。这时两个线程之间就需要协作才能完成这个任务,使两个线程协作有一个简单粗暴的方法,即监控布尔变量,代码如 阅读全文
posted @ 2018-06-23 18:33 今日说码 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 线程的状态 一个线程会有如下五个状态 1.新建:线程在被创建时会暂时处于这种状态,此时系统为线程分配资源并对其进行初始化 2.就绪:此时线程已经可以运行,只是系统没有为其分配CPU时间。 3.运行:系统为线程分配了CPU时间,线程处于运行状态 4.阻塞:线程由于等待I/O等原因无法继续运行,等待结束 阅读全文
posted @ 2018-05-29 22:24 今日说码 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 原子性 原子是最小单元、不可再分的意思。原子性是指某个操作在获取CPU时间时,要么就给它足够时间,让这个操作执行完,要么就不执行这个操作,执行时不能出现上下文切换(把CPU时间从一个线程分配到另一个线程)。 Java中对变量的读取和赋值都是原子操作,但long、double类型除外,只有使用vola 阅读全文
posted @ 2018-05-27 08:55 今日说码 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 显式锁 上篇讲了使用synchronized关键字来定义锁,其实Java除了使用这个关键字外还可以使用Lock接口及其实现的子类来定义锁,ReentrantLock类是Lock接口的一个实现,Reentrant是“重入”的意思,因此这个锁也是支持重入的,这里就不再测试它的重入性了,感兴趣的同学可以自 阅读全文
posted @ 2018-05-23 20:16 今日说码 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 锁的作用 锁是一种线程同步机制,用于实现互斥,当线程占用一个对象锁的时候,其它线程如果也想使用这个对象锁就需要排队。如果不使用对象锁,不同的线程同时操作一个变量的时候,有可能导致错误。让我们做一个测试: class Entity { public int value = 0; } class Inc 阅读全文
posted @ 2018-05-13 21:16 今日说码 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 什么是线程池 学习编程的小伙伴们会经常听到“线程池”、“连接池”这类的词语,可是到底“池”是什么意思呢?我讲个故事大家就理解了:在很久很久以前有一家银行,一年之中只有一个客户来办理业务,随着时间的推移,办理业务的人数每年都增加五千。20年之后这家银行办理业务的人次已经到十万。最开始只有一个客户的时候 阅读全文
posted @ 2018-05-07 19:30 今日说码 阅读(6589) 评论(0) 推荐(1) 编辑
摘要: 进程与线程 1. 进程 进程和代码之间的关系就像音乐和乐谱之间的关系一样,演奏结束的时候音乐就不存在了但乐谱还在;程序执行结束的时候进程就消失了但代码还在,而计算机就是代码的演奏家。 2. 线程 线程可以比喻成演奏过程中的某一种乐器的声音,乐器声音的种类可以很少,但是不能一个都没有——一个进程至少包 阅读全文
posted @ 2018-05-03 19:19 今日说码 阅读(265) 评论(1) 推荐(0) 编辑