java自定义线程阻塞
来源:互联网 发布:超链接调用js 编辑:程序博客网 时间:2024/04/30 19:45
线程问题如果想交流的话可以加我qq 1135409377。
LockSupport api 说明
说明:LockSupport 底层是通过,sun.misc.Unsafe实现的。
1:public static Object getBlocker(Thread t)
返回提供给最近一次尚未解除阻塞的 park 方法调用的 blocker 对象,如果该调用不受阻塞,则返回 null。返回的值只是一个瞬间快照,即由于未解除阻塞或者在不同的 blocker 对象上受阻而具有的线程。
2:public static void park()
为了线程调度,禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下三种情况之一以前,使其处于休眠状态:
- 其他某个线程将当前线程作为目标调用 unpark;
- 或者其他某个线程中断当前线程;
- 或者该调用不合逻辑地(即毫无理由地)返回。
此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态。
3:public static void park(Object blocker)
为了线程调度,在许可可用之前禁用当前线程。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下三种情况之一前,使其处于休眠状态:
- 其他某个线程调用将当前线程作为目标调用 unpark;
- 或者 其他某个线程中断当前线程;
- 或者 该调用不合逻辑地(即毫无理由地)返回。
此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态。
参数:
blocker - 导致此线程暂停的同步对象
4:public static void parkNanos(long nanos)
为了线程调度禁用当前线程,最多等待指定的等待时间,除非许可可用。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一以前,将其处于休眠状态:
- 其他某个线程将当前线程作为目标调用 unpark;
- 或者其他某个线程中断当前线程;
- 或者已超过指定的等待时间;
- 或者该调用不合逻辑地(即无缘无故地)返回。
此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态或所用的时间。
参数:
nanos - 要等待的最大纳秒数
5:public static void parkNanos(Object blocker,long nanos)
为了线程调度,在许可可用前禁用当前线程,并最多等待指定的等待时间。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一前,使其处于休眠状态:
- 其他某个线程将当前线程作为目标调用 unpark;
- 或者 其他某个线程中断当前线程;
- 或者 已超过指定的等待时间;
- 或者 该调用不合逻辑地(即毫无理由地)返回。
此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态或已过的时间。
参数:
blocker - 导致此线程暂停的同步对象
nanos - 要等待的最大纳秒数
6:public static void parkUntil(long deadline)
为了线程调度,在指定的时限前禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一以前,将其处于休眠状态:
- 其他某个线程将当前线程作为目标调用unpark;
- 或者其他某个线程中断当前线程;
- 或者指定的最后期限已过;
- 或者该调用不合逻辑地(即毫无理由地)返回。
此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态或当前时间。
参数:
deadline - 要等待的绝对时间,用相对于历元的毫秒数值表示,即 相对于格林威治时间1970年01月01日00时00分00秒 的毫秒数值表示
7:public static void parkUntil(Object blocker,long deadline)
为了线程调度,在指定的时限前禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一前,使其处于休眠状态:
- 其他某个线程将当前线程作为目标调用 unpark;
- 或者其他某个线程中断当前线程;
- 或者指定时限已过;
- 或者该调用不合逻辑地(即毫无理由地)返回。
此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态或当前时间。
参数:
blocker - 导致此线程暂停的同步对象
deadline - 要等待的绝对时间,用相对于历元 (Epoch) 的毫秒数值表示,即 相对于格林威治时间1970年01月01日00时00分00秒 的毫秒数值表示
8:public static void unpark(Thread thread)
如果给定线程的许可尚不可用,则使其可用。如果线程在 park 上受阻塞,则它将解除其阻塞状态。否则,保证下一次调用 park 不会受阻塞。如果给定线程尚未启动,则无法保证此操作有任何效果。
参数:
thread - 要执行 unpark 操作的线程;该参数为 null 表示此操作没有任何效果。
java自定义线程阻塞
自定义阻塞类 MyBlockpackage com.lp.myblock;import java.util.concurrent.locks.LockSupport;public class MyBlock { /** * 阻塞线程 * @throws InterruptedException */ public static void block() throws InterruptedException { LockSupport.park();//建议使用,park(Object blocker),应为blocker对象在线程受阻塞时被记录,以允许监视工具和诊断工具确定线程受阻塞的原因,通过getBlocker(Thread t)方法获取blocker对象。 boolean isInterrupted = Thread.currentThread().isInterrupted();//也可以替换为 Thread.interrupted(), // 方法 isInterrupted() 与 方法interrupted() 的区别// 1:isInterrupted() 是非静态方法,interrupted() 是静态方法。// 2:isInterrupted() 不会重置线程的中断状态,interrupted() 会重置线程的中断状态 if(isInterrupted) { throw new InterruptedException(Thread.currentThread().getName() + "线程被中断"); } } /** * 解除线程阻塞 * @param t */ public static void unBlock(Thread t) { LockSupport.unpark(t); }}测试类package com.lp.myblock;public class TestMain { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " 线程开始运行"); try { MyBlock.block(); } catch (InterruptedException e) { e.printStackTrace(); return; } System.out.println(Thread.currentThread().getName() + " 线程结束运行"); } }); t1.setName("t1");//设置线程 名称 t1.start();//运行线程 Thread.sleep(1000);// t1.interrupt();//手动中断线程 MyBlock.unBlock(t1);//接触线程阻塞 }}
- java自定义线程阻塞
- Java线程阻塞
- Java线程阻塞
- Java线程阻塞
- java线程的阻塞
- java线程阻塞
- Java 阻塞线程服务器
- java中的阻塞线程
- java线程的阻塞
- JAVA+信号量:阻塞线程
- JAVA线程阻塞
- Java线程的阻塞
- java.jse-线程-线程阻塞
- Java线程状态、线程停止、线程阻塞
- Java线程状态、线程停止、线程阻塞
- java 线程阻塞的问题
- Java线程唤醒与阻塞
- Java中线程的阻塞
- mybatis绑定错误
- Libevent 使用多线程
- SQL自定义函数function
- iptables工具__过滤包—命令(-A、-I、-D、-R、-L等)、参数(-p、-s、-d、--sport、--dport、-i、-o等)、动作-j (ACCEPT、DROP、REJECT、RED
- threads, processes, process groups and sessions
- java自定义线程阻塞
- lnmp 安装笔记
- 计算机操作系统笔记(2)--进程管理之进程的基本概念
- [树链剖分][bzoj3626]
- extjs完美实现“密码框显示提示文字,不显示输入文字”的变态需求!!!
- 17.2.2.1 The Slave Relay Log Slave中继日志
- NSUserDefaults存储自定义对象(序列化和反序列化存放自定义对象)
- ASP.NET——上传文件超过了最大请求长度
- 快速排序