
Java并发
编程老Y
985计算机专业研究生
六年一线互联网研发经验
专注编程入门
搭建适合初学者学习的编程网站
展开
-
Java线程基础
一、什么是线程 线程是进程的一个实体,线程不能够独立存在,进程作为操作系统资源分配的基本单位,线程是进程的一次执行路径,一个进程中可以有多个线程,同一进程的线程可以共享进程的资源。 因此线程时实际上是CPU执行调度的基本单位。Java中,main函数就是一个JVM进程。 二、创建线程的方式 1、继承Thread类 1)定义一个类extends Thread类,并重写run()方法,在run()方法...原创 2019-03-03 09:52:33 · 121 阅读 · 0 评论 -
Java死锁
死锁是指在多线程情况下,两个或两个以上线程在执行过程中,因争夺独占资源而出现的互相等待的现象。 产生死锁的必要条件 1)互斥条件:指线程间竞争的资源具有独占性,一旦被某个线程获取,则其他线程只能等待 2)持有并保持:指一个线程获取到了至少一个线程,又要获取其他资源,而该资源正被其他线程持有,此时这个线程只能阻塞,同时又不释放自己已持有的资源。 3)不可剥夺:指线程获取到的资源在使用完之前不可以被...原创 2019-03-03 21:37:15 · 126 阅读 · 0 评论 -
ThreadLocal
多线程访问同一个共享变量可能出现并发问题,尤其是使用线程写入的时候。为了保证线程安全,往往需要进行加锁,但是加锁操作往往是一件耗时的工作,在有些情况(例如数据库连接、session管理等)可以采取另外的方式,将共享变量存入线程本地解决竞争问题,每个线程只操作本地变量。 ThreadLocal就可以做到这件事:创建了一个ThreadLocal变量,就为线程创建了那个共享变量的本地副本。但是这个本地变...原创 2019-03-09 17:18:21 · 157 阅读 · 0 评论 -
synchronized
synchronized是Java提供的一个内置锁,可以在任意对象上加锁,具有互斥和可重入的特性。当一个线程进入synchronized修饰的代码块时,会自动获取内部锁,这时其他线程访问该代码块就会被挂起,直至该线程正常结束或异常退出,或者在代码块内部调用wait()释放锁。 synchronized的用法: 1、修饰实例方法 在当前类实例上加锁 public synchronized void ...原创 2019-03-10 16:37:27 · 166 阅读 · 0 评论 -
Java内存模型、volatile关键字
Java内存模型 Java内存模型规定所有的变量都保存在主内存里,每个线程有自己的工作内存,每次对变量都操作都会将变量拷贝到工作内存,之后同步到主内存。 原子性、可见性、有序性 原子性:在Java中,对基本数据类型的读取和赋值是原子性操作,即不可拆分,要么一次执行,要么不执行 注意 ++操作不是原子操作 可见性:一个线程对某个变量的操作可以被其他线程立即可见,可见性需要主内存参与,因为线程每次都...原创 2019-03-17 17:00:31 · 226 阅读 · 0 评论 -
Java锁
锁的种类有:乐观锁与悲观锁、公平锁与非公平锁、独占锁与共享锁、可重入锁、自旋锁等。 乐观锁与悲观锁 乐观锁与悲观锁原本是数据库的概念,Java中借用了这个思想。 悲观锁:指多线程的情况下,每次访问数据一定会被其他线程修改,因此每次访问都要加锁,并在整个数据处理过程中,都要锁定数据,阻塞其他线程。数据库的悲观锁一般借助数据库的锁机制,即加上排他锁。 乐观锁:相对于悲观锁认为每次访问数据都要加锁,乐观...原创 2019-04-14 17:02:24 · 172 阅读 · 0 评论