随笔分类 - 并发编程
摘要:一、6种状态 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行
阅读全文
摘要:例子 编写出现OutOfMemoryError的代码 IDEA配置JVM的启动参数 点击Edit Configurations... 运行结果 分析 Dump下的文件: 分析工具 采用IBM HeapAnalyzeer 网盘现在地址:https://pan.baidu.com/s/1qV4A4fm8
阅读全文
摘要:Executor 简介 Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更
阅读全文
摘要:为什么要使用线程池 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP )、通过 JMS队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序
阅读全文
摘要:CountDownLatch CountDownLatch是一种java.util.concurrent包下一个并发工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。 可以控制线程的执行顺序 例子:学校操场的跑道上8位选手首先进行1000米赛跑,跑完裁判清空跑道进行跨栏比赛。 结果:
阅读全文
摘要:为什么会出现同步容器 java集合框架图 在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。 List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。 Collection和Map是一个顶层接口,而List、Set、Queue则继承了
阅读全文
摘要:使用场景 线程A执行到一半,需要一个数据,这个数据需要线程B去执行修改,只有B修改完成之后,A才能继续操作 线程A的run方法里面,调用线程B的join方法,这个时候,线程A会等待线程B运行完成之后,再接着运行 代码: 结果: 源码 完成!!!
阅读全文
摘要:使用管道流进行通信 以内存为媒介,用于线程之间的数据传输。 主要有面向字节:【PipedOutputStream、PipedInputStream】 面向字符【PipedReader、PipedWriter】 代码 读线程类: 测试类 结果: 源代码地址:https://github.com/wox
阅读全文
摘要:wait、notify、notifyAll 何时使用 在多线程环境下,有时候一个线程的执行,依赖于另外一个线程的某种状态的改变,这个时候,我们就可以使用wait与notify或者notifyAll wait跟sleep的区别 wait会释放持有的锁,而sleep不会,sleep只是让线程在指定的时间
阅读全文
摘要:代码 在这里我们只是实现lock()和unLock()方法 测试 结果 源代码地址:https://github.com/woxbwo/is-concurrent 完成!!!
阅读全文
摘要:Lock的使用 代码: 结果: lock与synchronized的区别 lock 获取锁与释放锁的过程,都需要程序员手动的控制 Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就 是CAS操作 synchr
阅读全文
摘要:锁的分类 自旋锁: 线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。jvm实现,使线程在没获得锁的时候,不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起。 阻塞锁:阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间
阅读全文
摘要:什么是线程安全性 当多个线程访问某个类,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类为线程安全的。 《并发编程实战》。 什么是线程不安全 多线程并发访问时,得不到正确的结果。 结果: 产生线程不安全问题
阅读全文
摘要:进程与线程的区别 进程:是系统进行分配和管理资源的基本单位 线程:进程的一个执行单元,是进程内调度的实体、是CPU调度和分派的基本单位,是比进程更小的独立运行的基本单位。线程也被称为轻量级进程,线程是程序执行的最小单位。 一个程序至少一个进程,一个进程至少一个线程。 进程有自己的独立地址空间,每启动
阅读全文
摘要:什么是并发编程 并发历史: 早期计算机--从头到尾执行一个程序,资源浪费 操作系统出现--计算机能运行多个程序,不同的程序在不同的单独的进程中运行 一个进程,有多个线程 提高资源的利用率,公平 串行与并行的区别: 串行:洗茶具、打水、烧水、等水开、冲茶 并行:打水、烧水同时洗茶具、水开、冲茶 好处:
阅读全文

浙公网安备 33010602011771号