Java 并发编程
文章平均质量分 83
jcsyl_mshot
点滴生活,水落石出。
展开
-
Java 并发编程基础之线程状态
现在操作系统中进程的定义:具有独立功能的程序在一个数据集合上的一次运行,是系统进行资源分配和调度的独立单位。线程:轻量级进程,是系统调度的最小单元,拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。Java程序是天生的多线程程序,通过JMX(thredMXBean)查看一个普通的java程序包含哪些线程。使用多线程的优势:1)更多的处理器核心2)更快的响应速度3)多线程...原创 2020-04-07 15:31:07 · 146 阅读 · 0 评论 -
ThreadLocal
ThreadLocal 的原理ThreadLocal 表面相 当 于 一 个 容 器 , 用 于 存 放 每 个 线 程 的 局 部 变 量 (实际由当前线程中的map对象进行存储)。ThreadLocal 实例通常来说都是 private static 类型的。ThreadLocal 可以给一个初始值, 而每个线程都会获得这个初始化值的一个副本, 这样才能保证不同的线程都有一份拷贝。所以Thr...原创 2019-08-26 16:53:35 · 110 阅读 · 0 评论 -
String、StringBuilder、StringBuffer
String、StringBuilder、StringBuffer共同点:底层都是使用一个char类型的数组保存元素(叫value)1.可变与不可变string 对象是不可变的; StringBuilder 与 StringBuffer 对象是可变的。 因此在每次对 String 类型进行改变的时候, 都会生成一个新的 String 对象, 然后将指针指向新的 String 对象, ...原创 2018-04-25 16:54:16 · 111 阅读 · 0 评论 -
线程相关类-Callable Runnable Thread
1创建线程的办法直接继承Thread实现Runnable接口 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Callable2.Thread和R...原创 2018-05-08 11:12:18 · 154 阅读 · 0 评论 -
多线程的同步
在多线程的环境中, 经常会遇到数据的共享问题, 即当多个线程需要访问同一资源时, 他们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,否则, 程序的运行结果将会是不可预料的, 在这种情况下, 就必须对数据进行同步。 在 Java 中, 提供了四种方式来实现同步互斥访问: synchronized 和 Lock和 wait()/notify()/notifyAll()方法和 CAS。...原创 2018-05-08 21:28:23 · 232 阅读 · 0 评论 -
Java 线程相关问题
1.Java 中 interrupted() 和 isInterrupted()方法的区别?interrupt()方法用于中断线程【终止线程】。是用来设置中断状态的。返回true说明中断状态被设置了而不是被清除了。调用该方法的线程的状态将被置为”中断”状态。interrupted()作用于当前线程,返回的是当前线程的中断状态同时清除线程的中断标志。isInterrupt():线程是否中...原创 2018-05-08 20:48:52 · 145 阅读 · 0 评论 -
生产者/消费者问题的多种实现方式
1.使用阻塞队列实现// Producer Class in javaclass Producer implements Runnable { private final BlockingQueue sharedQueue; public Producer(BlockingQueue sharedQueue) { this.sharedQueue = sh...原创 2018-05-08 20:15:11 · 174 阅读 · 0 评论 -
Java 中的线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。 使用线程池的好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,线程池的实现原理线程池的...原创 2018-04-12 16:53:11 · 217 阅读 · 0 评论 -
Java 中的锁之Lock接口
锁是控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁是允许多个并发线程的访问,如读写锁),在Lock接口出现之前,Java程序靠synchronized关键字实现锁功能的。Java SE5之后,并发包里增加了Lock 接口(以及相关实现类)用来实现锁功能,提供类似的同步功能,缺少synchronized 隐身释放锁的便捷性,但是拥有锁的获取与释放的可操作...原创 2018-03-28 14:58:05 · 467 阅读 · 0 评论 -
Java 中并发工具类 CountDownLatch、CyclicBarrier、Semaphore和Exchanger
JDK 的并发包中提供了几个非常有用的并发控制工具类。CountDownLatch\CyclicBarrier 和Semaphore 提供了一种并发流程控制的手段,Exchanger 工具类提供了线程间交换数据的一种手段。CountDownLatchCountDownLatch 允许一个或多个线程等待其他线程完成操作。 场景:解析一个Excel里的多个sheet数据,使用多个线程,每个线...原创 2018-04-10 11:58:19 · 523 阅读 · 0 评论 -
Java 并发编程基础之线程应用实例
线程应用实例等待超时模型: 在等待/通知范式基础上增加了超时控制,这使得该模式相比原有范式更具有灵活性。总体思路如下 构造数据连接池,模拟出获取,使用,释放连接等方法,由于获取释放等方法将改变数据连接池中资源的数量,为实现线程安全,用synchronized修饰数据池对象。注意,这里的超时获取,与对象锁的超时获取有异曲同工之妙,原理基本一致。 在测试中,用CountDo...原创 2018-03-27 13:42:21 · 146 阅读 · 0 评论 -
Java 的13个原子操作类
JDK1.5 以后开始提供java.util.concurrent.automic 包,该包中一共提供了13个类,用于简单、高效、线程安全的更新一个变量。给予类型,可以将这13个类分成以下四大部份:原子更新基本类型类automicBoolean:原子更新布尔类型 automicInteger:原子更新长整形 automicLong:原子更新整形 以上三个类提供方法基本一样如: ...原创 2018-04-08 22:57:37 · 365 阅读 · 0 评论 -
Condition 接口
任意一个java对象,都拥有一组监视器方法(Object),主要包括wait()、notify()以及notifyall(),这些方法配合synchronized同步关键字,可以实现通知等待模式。Condition接口也提供类似Object的监视器方法,与lock 配合实现等待/通知模式。condition对象是由lock对象创建出来,依赖于Lock对象,一般会将condition变量作为成员变量...原创 2018-03-31 14:58:16 · 174 阅读 · 0 评论 -
Java 并发编程基础之线程通信
在进行进程通信之前,我们先了解下Daemon线程(即守护线程):一种支持型线程,主要作为程序中后台调度以及支持性工作。这就意味着1)用户线程(如MAIN线程等)不会是守护线程2)JVM中没有非Daemon线程时,Daemon立即终止,并且finally块也不执行。通常通过thread.setDaemon(true) 将一个线程设置为守护进程。课题一:启动和终止进程 1)构造线程:线程对象在构造的时...原创 2018-03-25 20:25:14 · 141 阅读 · 0 评论 -
Java 并发机制之Synchronized
在多线程并发编程中synchronized的一直是元老级别角色,通过对象的内置锁实现互斥访问共同变量,通常被称为重量级锁,但是为了减少获得锁和释放锁带来的性能消耗,在jdk 1.6中引入了偏向锁和轻量级锁。在以下博文中,我们先讨论其实现底层原理以及他的锁升级过程。java 中每一个对象可作为锁,具体有三种表现形式:1)对于普通同步方法,锁是当前实例对象 2)对于静态同步方法,锁是当前类的class...原创 2018-03-24 14:22:04 · 233 阅读 · 0 评论 -
Java 并发机制之volatile
在多线程并发编程中,volatile 是轻量级synchronized,被关键字volatile修饰的域变量被称为共享变量,因此在开发过程中是可见的,即一个线程修改一个共享变量时候,另外一个线程能读到这个修改的值。因此在线程同步中具有以下几个特性:1)为域变量提供一个免锁机制2)该域能够被其他线程更新3)每次使用需要从内存中重新获取4)不是原子操作,不能被final 修饰vola...原创 2018-03-24 13:18:50 · 259 阅读 · 0 评论 -
java 重入锁和读写锁
重入锁 顾名思义,就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁,并且支持获取锁的公平和非公平性选择。synchronized 关键字隐私支持重进入,ReentrantLock在调用lock 方法时候,已经获取到锁的线程能够再次调用lock()方法时而不被阻塞。 公平的获取锁,也就是等待时间最长的线程最优先获取锁,也可以说获取是顺序的。ReentrantLock提供一...原创 2018-03-30 10:57:07 · 344 阅读 · 0 评论