
多线程
aiyongbo123456
这个作者很懒,什么都没留下…
展开
-
volatile
package com.example.demo.morethread;import java.util.concurrent.atomic.AtomicInteger;public class AtomicTest { private static AtomicInteger atomicInteger=new AtomicInteger(0); ...原创 2019-02-22 21:05:19 · 154 阅读 · 0 评论 -
原子操作
当在多线程情况下,同时更新一个共享变量,由于我们前面讲过的原子性问题,可能得不到预期的结果。如果要达 到期望的结果,可以通过synchronized来加锁解决,因为synchronized会保证多线程对共享变量的访问进行排 队。在Java5以后,提供了原子操作类,这些原子操作类提供了一种简单、高效以及线程安全的更新操作。而由于变量 的类型很多,所以Atomic一共提供了12个类分别对应四种类型...原创 2019-02-20 23:24:12 · 184 阅读 · 0 评论 -
Semaphore
semaphore也就是我们常说的信号灯,semaphore可以控制同时访问的线程个数,通过acquire获取一个许可,如 果没有就等待,通过release释放一个许可。有点类似限流的作用。叫信号灯的原因也和他的用处有关,比如某商 场就5个停车位,每个停车位只能停一辆车,如果这个时候来了10辆车,必须要等前面有空的车位才能进入。 package com.example.demo.moret...原创 2019-02-20 22:49:13 · 153 阅读 · 0 评论 -
线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池 就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。所以合理的使用线程 池可以\1. 降低创建线程和销毁线程的性能开销\2. 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来的问题,类似起到了限流的作用;线程是稀 缺资源,如果无线创建,会造成系统...原创 2019-02-19 23:23:46 · 177 阅读 · 0 评论 -
CountDownLatch
countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从 命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。countdownlatch提供了两个方法,一个是countDown,一个是await, countdownlatch初始化的时候需要传入一 个整数,在这个整数倒数到0之前,调用了await方法的程序都必须要等待...原创 2019-02-19 22:23:34 · 163 阅读 · 0 评论 -
读写锁
我们以前理解的锁,基本都是排他锁,也就是这些锁在同一时刻只允许一个线程进行访问,而读写所在同一时刻可 以允许多个线程访问,但是在写线程访问时,所有的读线程和其他写线程都会被阻塞。读写锁维护了一对锁,一个 读锁、一个写锁; 一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于写的。在读多于写的情况 下,读写锁能够提供比排它锁更好的并发性和吞吐量.package com.example...原创 2019-02-18 23:04:30 · 135 阅读 · 0 评论 -
重入锁
同步锁锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源, 在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC 的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的同步功能,只是它比 synchronized更灵活,能够显示的获取和释放锁。...原创 2019-02-17 12:39:48 · 213 阅读 · 0 评论 -
wait和notify
wait和notify是用来让线程进入等待状态以及使得线程唤醒的两个操作 package com.example.demo.morethread;public class ThreadWait extends Thread{ private Object lock; public ThreadWait(Object lock) { this.lock ...原创 2019-02-17 12:01:01 · 163 阅读 · 0 评论 -
自旋锁、偏向锁、轻量级锁、重量级锁
synchronized的锁升级和获取过程 了解了对象头以及monitor以后,接下来去分析synchronized的锁的实现,就会非常简单了。前面讲过 synchronized的锁是进行过优化的,引入了偏向锁、轻量级锁;锁的级别从低到高逐步升级, 无锁->偏向锁->轻量 级锁->重量级锁.自旋锁(CAS) 自旋锁就是让不满足条件的线程等待一段时间,而不是立即挂起。看持有锁的...原创 2019-02-16 20:32:44 · 243 阅读 · 0 评论 -
Java内存模型
Java 内存模型定义了线程和内存的交互方式,在 JMM 抽象模型中,分为主内 存、工作内存。主内存是所有线程共享的,工作内存是每个线程独有的。线程 对变量的所有操作(读取、赋值)都必须在工作内存中进行,不能直接读写主 内存中的变量。并且不同的线程之间无法访问对方工作内存中的变量,线程间 的变量值的传递都需要通过主内存来完成,他们三者的交互关系如下 JMM怎么解决原子性、可见性、有序性...原创 2019-02-16 20:16:21 · 148 阅读 · 0 评论 -
线程的停止
线程的停止 线程的启动过程大家都非常熟悉,但是如何终止一个线程,我相信绝大部分人 在面试的时候被问到这个问题时,也会不知所措,不知道怎么回答。 线程的终止,并不是简单的调用 stop 命令去。虽然 api 仍然可以调用, 但是和其他的线程控制方法如 suspend、resume 一样都是过期了的不建议使 用,就拿 stop 来说,stop 方法在结束一个线程时并不会保证线...原创 2019-02-16 19:03:00 · 150 阅读 · 0 评论 -
线程的状态
线程作为操作系统调度的最小单元,并且能够让多线程同时执行,极大的提高 了程序的性能,在多核环境下的优势更加明显。Java 线程既然能够创建,那么也势必会被销毁,所以线程是存在生命周期的, 那么我们接下来从线程的生命周期开始去了解线程。 线程一共有 6 种状态(NEW、RUNNABLE、BLOCKED、WAITING、 TIME_WAITING、TERMINATED)NEW:初始状态,线程被...原创 2019-02-16 18:06:33 · 154 阅读 · 0 评论 -
带有返回值的多线程
通过ExecuteService,Callable,Future实现带有返回值的多线程:1、通过实现Callable接口创建线程类package com.example.demo.morethread;import java.util.concurrent.*;/** *使用带有返回值的线程 */public class CallableDemo implements Ca...原创 2019-02-16 16:19:40 · 1986 阅读 · 0 评论