Java多线程
文章平均质量分 74
EclipseO2
这个作者很懒,什么都没留下…
展开
-
synchronized关键字(二)
一、synchronized同步代码块使用关键字 synchronized 声明的方法在某些情况下是有弊端的,比如线程 A 调用同步方法执行一个长时间的任务,那么线程 B 必须等待线程 A 将这个同步方法全部执行完才可以调用该方法,但是很多时候我们不需要对整个方法进行同步,可能只需要对部分代码块进行同步,这个时候就用到了synchronized同步代码块直接看个使用 synchronized ...原创 2018-10-22 20:46:26 · 220 阅读 · 0 评论 -
ThreadLocal源码分析
一、实例代码先来看一个使用ThreadLocal的实例,然后再开始我们的讲解class Tools6 { public static ThreadLocal<Integer> intLocal = new ThreadLocal<>(); public static ThreadLocal<String> strLocal = new Th...原创 2019-03-25 02:25:22 · 177 阅读 · 0 评论 -
使用ReentrantReadWriteLock类
一、使用ReentrantReadWriteLock类类ReentrantLock虽然具有完全互斥排他的效果,即同一时间只有一个线程在执行 lock() 方法后面的任务,虽然可以保证线程的安全性,但是效率却十分低下,所以还有一种读写锁 ReentrantReadWriteLock 类,可以用它来加快运行的效率读写锁共有两个锁,一个是读相关的锁,也称作共享锁,另一个是与写操作相关的锁,也称作排他...原创 2018-11-12 11:52:45 · 356 阅读 · 0 评论 -
多线程中的停止
一、什么是多线程中的停止?每个线程都有一个中断状态,默认的中断状态都是 false,一个线程可以给另一个线程发送一个中断信号,接收到这个中断信号的线程的中断状态就被置为 true,Java 中的 Thread 类提供了以下几种方法来获取和修改线程的中断状态:void interrupt():将某个线程的中断状态置为 true,不是真正的将线程停止,而是在当前线程中打了一个停止的标记stat...原创 2018-11-13 16:32:01 · 502 阅读 · 0 评论 -
ReentrantLock类中的方法
ReentrantLock类中的方法ReentrantLock类中有很多的方法:getHoldCount():当前线程调用 lock() 方法的次数getQueueLength():当前正在等待获取 Lock 锁的线程的估计数getWaitQueueLength(Condition condition):当前正在等待状态的线程的估计数,需要传入 Condition 对象hasWaite...原创 2018-11-05 20:21:48 · 1904 阅读 · 0 评论 -
ReentrantLock类的使用
一、使用ReentrantLock类和 synchronized 关键字来实现线程之间的同步互斥一样,ReentrantLock 类也可以达到这样的效果class MyService2 { private Lock lock = new ReentrantLock(); public void methodA() { //当前线程获得对象锁 ...原创 2018-11-03 23:29:50 · 318 阅读 · 0 评论 -
等待和通知机制(wait和notify)
1. 等待和通知机制的实现wait() 方法wait() 是 Object 类的方法,它的作用是使当前执行代码的线程进行等待,该方法将当前线程置入“预执行队列”中,并在 wait() 所在的代码行处停止执行,直到接到通知或者被中断才能继续执行。线程必须获得该对象的对象锁,即只能在同步方法或者同步方法块中调用 wait() 方法,在执行 wait() 方法后,当前线程释放所拥有的对象锁,如果 w...原创 2019-04-10 23:20:27 · 1097 阅读 · 0 评论 -
synchronized关键字(三)
一、三个结论对于 synchronized(非 this 对象 x)当多个线程同时执行 synchronized(x){} 同步代码块时呈现同步效果当其他线程执行 x 对象中 synchronized 同步方法时呈同步效果当其他线程执行 x 对象方法里面的 synchronized(this) 代码块时也呈同步效果需要说的是,虽然有三点,都是本质都是一样的,即每个线程拥有相同的对象锁...原创 2018-10-24 22:49:19 · 450 阅读 · 0 评论 -
join()方法的使用
一、join()方法的使用主线程创建并启动子线程,如果自线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到 join() 方法先来看一个不用 join() 方法的例子public class MyThread extends Thread { @Override ...原创 2018-10-29 21:56:12 · 20760 阅读 · 3 评论 -
wait()方法的注意点
一、问题是什么?这个问题是我昨天测试wait()方法的时候偶然发现的,即:一个线程在同步块或者同步方法中使用同步对象调用 wait() 方法的时候,会出现另一个线程在同步块或者同步方法中不使用 notify() 方法,被 wait() 的线程就能自动被唤醒的现象。当然这个需要分两种情况,这个下面会具体说到我花了半个下午加一个晚上的时间,查了很多资料,问了一些人,才勉强搞懂为什么会出现这种情况...原创 2018-10-29 21:41:22 · 14443 阅读 · 7 评论 -
synchronized关键字(一)
一、线程安全和不安全非线程安全:在多个线程对同一个对象的实例变量进行并发访问时会出现值被更改、值不同步的情况线程安全:获得的实例变量的值是经过同步处理的,按照顺序执行,不会出现脏读情况举个例子:5个销售员, 卖同一堆货物,每个销售员在卖出一个货品后,并不是立即知道当前货物剩余数量的,因为在他卖出的同时,可能其他销售员已经卖出好几个货品了,如果这个时候就减1,那么就会产生数据的不同步,可能...原创 2018-10-21 23:04:46 · 549 阅读 · 1 评论 -
线程的优先级
一、线程的优先级在操作系统中,线程可以划分优先级,优先级较高的线程得到的 CPU 资源较多,即 CPU 优先执行优先级较高的线程对象的任务在 Java 中使用 setPriority 方法来设置优先级,同时把优先级划分成 1~10 这10个等级,如果小于 1 或者大于 10,则 JDK 会抛出异常// 线程最小的优先级等级public final static int MIN_PRIORI...原创 2018-10-21 22:57:43 · 1484 阅读 · 1 评论 -
Thread 中的方法
一、静态方法1.1 currentThread() 方法currentThread() 方法返回代码段正在被哪个线程调用的那个线程的信息public class MyThread7 extends Thread{ static { System.out.println("静态代码块:" + Thread.currentThread().getName()); ...原创 2018-10-21 22:54:16 · 1793 阅读 · 3 评论 -
进程和线程
一、进程和线程进程如果打开一个任务管理器,那么里面所有的 exe 程序都可以理解成一个进程。Adobe 是一个进程,Chrome 也是一个进程线程线程可以理解成在进程中独立运行的子任务。比如,QQ.exe 运行时就有很多子任务在同时运行,比如,好友视频线程、下载文件线程、传输数据线程,这些不同的任务都可以同时运行,每一项任务可以理解成是线程在工作好处可以最大限度地利用CPU地空闲时间...原创 2018-10-21 22:49:16 · 133 阅读 · 0 评论 -
Java集合 | CopyOnWriteArrayList源码分析(JDK 1.7)
一、基本结构public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable二、基本属性// 加锁的方法,在增加、移除操作的时候都需要加锁transient final ReentrantLock lock = n...原创 2019-03-31 14:34:11 · 281 阅读 · 0 评论