![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 57
胃小
这个作者很懒,什么都没留下…
展开
-
并发编程之线程的中断
使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。 下面一段代码演示了休眠线程的中断:[java] view plain copy pub...转载 2018-03-17 15:05:38 · 151 阅读 · 0 评论 -
java多线程协作CyclicBarrier
CyclicBarrier 字面意思是循环拦截器, 是java current包下的多线程协作的类, 创建此类必须出入一个 parties 值, 如果拦截的线程数达到 parties 值, 则会释放拦截的锁, 相关线程得以继续执行, 另外创建类对象时也可以在传入一个 Runnable 对象, 表示如果CyclicBarrier 达到释放锁的条件, 首先会开启 Runnable 线程 , 等此线程...原创 2018-09-27 14:48:42 · 165 阅读 · 0 评论 -
java多线程协作Semaphore
Semaphore的意思是信号量, 多线程中使用此类控制并发量, 常用的方法有acquire() 和 release() Semaphore没有空参构造, 创建对象时必须传入一个permits 值, 代表最大并发数; 当permits = 1 时 ,代表单线程下面看一个例子package _Semaphore;import java.util.concurrent.Executo...原创 2018-09-27 13:59:10 · 183 阅读 · 0 评论 -
java多线程协作CountDownLatch
CountDownLatch 是current 包下的常用的同步多线程行为的类, 构造中需要输入一个计数值, 当这个值不为零时, 执行 await() 的线程会阻塞, 线程每次执行 countDown() 方法都会是计数值减一;已多人赛跑为例, 建立多线程模型, 演示CountDownLatch 的功能package _CountDownLatch;import java.util....原创 2018-09-27 12:02:48 · 186 阅读 · 0 评论 -
java多线程类锁与对象锁的研究
静态方法上的同步锁使用的是当前类.class 作为锁对象,实际上是Class对象, 当使用勒种的同步静态方法时会受到类锁的影响,会出现锁的挣用, public synchronized static void eat() throws Exception非静态方法上的锁 , 默认使用的是对象本身 也就是this 作为同步锁, 与同步静态方法对应的锁不冲突;public synch...原创 2018-09-27 09:37:11 · 174 阅读 · 0 评论 -
java多线程异常的捕获
在多线程中,如果子线程抛出了异常,在main中并不能捕获到;看一个例子package _Executors;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExceptionRunnable implements Runnable{ ...原创 2018-09-20 15:20:03 · 1538 阅读 · 0 评论 -
并发编程之使用堆栈信息优化接口
最近在使用jmeter压测代码的时候发现单线程模式响应速度很快,但是多线程下总是很卡,怀疑有锁;所以打印堆栈观察了下各个线程:最终找到了这段信息:"play-thread-9" prio=10 tid=0x00007faba8003800 nid=0xc2ab runnable [0x00007facf93cd000] java.lang.Thread.State: RUNNABL...原创 2018-05-13 11:38:37 · 215 阅读 · 0 评论 -
并发编程之三种创建线程的方法
jdk一共提供了三种创建线程的方法, 分别是, 继承Thread类, 实现Runnable接口和实现Callable接口;其中Callable可以返回值,下面以购票为例, 对三种方法进行演示Thread方式:package ticketwiththread;public class Ticket extends Thread { static int i = 100; public Ti...原创 2018-03-13 20:42:37 · 185 阅读 · 0 评论 -
并发编程之死锁
两个线程互相持有对方需要的锁,就会发生死锁的现象;发生死锁后中断无效;看一个例子public class DeadLock { public synchronized void show(DeadLock d){ try { System.out.println(Thread.currentThread().getName()+":"+"show方法start"); Threa...原创 2018-03-18 13:44:05 · 163 阅读 · 0 评论 -
并发编程之锁的可重入
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。 当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁...转载 2018-03-18 11:52:06 · 139 阅读 · 0 评论 -
并发编程之同步锁
每个对象或者类都对应一个同步锁,在进入使用synchronize方法或者synchronize代码块的线程会持有相应的锁,此时其他想要进入同步方法或同步代码块时必须等待(即同步阻塞,被放进lock pool);锁的情况有一下几种1 同步非静态方法: 此类方法为对象调用,使用的是对象级别的锁,而且该锁为线程中调用此方法的对象对应的锁(this),来看一个例子public class LockD...原创 2018-03-17 18:34:50 · 228 阅读 · 0 评论 -
并发编程之线程的状态
通常来讲, 线程有5种状态,分别是开始,可运行,运行汇总,阻塞,死亡,其中,阻塞分为三种情况,同步阻塞,等待阻塞和其他阻塞,线程各种状态之间的关系大体如下图所示下面对各个状态进行详细解读1new :创建出线程,即new出线程,即完成了第一阶段;2runnable,创建的线程调用start方法则进入runnable阶段,运行中的线程被cpu切出,也进入了runnable阶段,阻塞状态的线程,其阻塞条...原创 2018-03-17 16:20:43 · 127 阅读 · 0 评论 -
java多线程协作Exchanger
一、简介 Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。在本文中我将采取由浅入深的方式来介绍分析这个工具类。首先我们来看看官方的api文档中的叙述:A synchronization point at which threads can pair and swap elements within pairs. Each thread prese...转载 2018-09-27 15:18:18 · 142 阅读 · 0 评论