Java并发
姑娘加油
加油
展开
-
线程及创建线程的三种方法
基本概念程序:是为了完成特定任务,用某种语言编写的一组指令的集合.即指一段静态代码。进程:进程是程序的一次执行过程,是系统进行资源分配和处理机调度的一个独立单位。程序是一个静态的概念,进程是一个动态的概念。一个程序多次执行,对应多个进程;不同的进程可以包含同一程序。线程:进程可进一步细化为线程,是一个程序内部的一条执行路径 在Java中弱化进程的概念,使用的是线程概念。...原创 2018-09-18 16:51:52 · 1018 阅读 · 0 评论 -
Java死锁问题
目录死锁概念 Java多线程中的死锁问题 Java中如何查看是否产生死锁 Java死锁经典问题——哲学家就餐问题1,死锁概念 死锁是操作系统层面的一个概念,是进程死锁的简称,最早在 1965 年由 Dijkstra 在研究银行家算法时提出的,它是计算机操作系统乃至整个并发程序设计领域最难处理的问题之一。在Java多线程中也常常出现死锁问题。2,Java多线程中的死锁...原创 2018-09-22 16:45:50 · 548 阅读 · 0 评论 -
CAS操作
这段代码我们除了用synchronized来保证原子性我们还有别的什么办法吗?我们来看一下这种方法真是太神奇了,不用加synchronized锁也能保证并发下的原子性。那么AtomicInteger是什么呢?AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。那我们来通过进入getAndIncrement()方法里探究一下为什么这...原创 2018-09-21 11:16:42 · 7382 阅读 · 3 评论 -
锁及锁优化
Java中通过锁来实现线程安全问题。Java的线程是映射到原生的操作系统上的,如果要阻塞或唤醒一个线程,都需要操作系统来帮忙完成。这就需要从用户态转换到核心态,因此状态转换需要耗费很多的处理器时间。所以Synchronized锁是Java语言中一个重量级操作。所以我们引进了各种锁优化。1,自旋锁与适应性自旋 挂起线程和恢复线程都需要转入内核态中完成,这些操作给...原创 2018-09-26 18:19:46 · 294 阅读 · 0 评论 -
线程池
线程池 在Java多线程中,如果并发的线程数量过大,并且每一个线程都是执行了一个很短的任务就结束了,这样频繁的创建销毁线程会极大的降低系统的效率。所以在Java中引入 了线程池使得线程可以得到复用。既执行完一个任务不会被销毁而去执行下一个任务。以下基于jdk1.7.8.1源码来进行分析目录线程池线程池的继承关系线程池的基本属性线程池的构造函数线程池的执...原创 2018-09-25 18:59:12 · 261 阅读 · 0 评论 -
synchronized与volatile
在这之前我们应该先了解一下Java内存模型请戳~~~~>Java内存模型Volatile关键字保证操作变量的可见性和有序性,不保证操作变量的原子性 这段代码本应该是20000,但是为什么比20000小呢??因为num++这个指令它并不具有原子性,它是分为几步执行的,volatile能够保证拿到的时候是正确的数据,但是由于它只走了一步,别的线程把这个变量的值改了...原创 2018-09-18 22:12:16 · 720 阅读 · 3 评论 -
synchronized关键字
互斥同步是最常见的一种高并发正确性保障手段。同步是指多个线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用,而互斥是实现同步的一种手段。在Java中,最基本的互斥同步手段是synchronized关键字。synchronized使用规则:在Java中同步锁是依赖于对象存在的。不同线程对于同步锁是互斥的。例如一个线程拥有了这个对象的同步锁,则另外一个线程是拿不到的,除非这个线...原创 2018-09-18 21:33:45 · 195 阅读 · 0 评论 -
线程状态及其转换
线程的基本状态1. 新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。2. 就绪状态(Runnable):线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。3. 运行状态(Running) : 线程获取CPU权限进行执行。4. 阻塞状态(Blocked) : 阻塞状...原创 2018-09-18 18:18:19 · 232 阅读 · 0 评论 -
线程的常用方法介绍
start()与run() start() 启动线程并执行相应的run()方法 run() 子线程要执行的代码放入run()方法我们会发现,调用start()方法才是 启动一个新的线程。调用run()方法只是主线程调用了一个类的一个普通方法。getName()和setName() getName() 获取此线程的名字 setName() 设置此线程的名字...原创 2018-09-18 17:34:57 · 7308 阅读 · 0 评论 -
ConcurrentHashMap详解
目录ConcurrentHashMap介绍ConcurrentHashMap底层数据结构ConcurrentHashMap部分分析ConcurrentHashMap与HashMap、HashTable的区别源码为jdk1.7ConcurrentHashMap介绍 ConcurrentHashMap 是concurrent包下的一个集合类。它是线程安全的哈希表。它...原创 2018-09-22 20:22:28 · 8652 阅读 · 0 评论