他可以在线程任意位置让线程阻塞,
LockSupport的静态方法park()可以阻塞当前线程,类似的还有parkNanos() ParkUntil()等,他们实现了一个限时等待
public class LockSupportDemo {
public static Object u = new Object();
static ChangeObjectThread t1 = new ChangeObjectThread("t1");
static ChangeObjectThread t2 = new ChangeObjectThread("t2"); public static class ChangeObjectThread extends Thread {
public ChangeObjectThread(String name) {
super.setName(name);
} public void run() {
synchronized (u) {
System.out.println("in" + getName());
LockSupport.park();
}
}
} public static void main(String[] args) throws InterruptedException {
t1.start();
Thread.sleep(100);
t2.start();
LockSupport.unpark(t1);
LockSupport.unpark(t2);
t1.join();
t2.join();
}
}
     我们可以使用park()和unpark()方法替换掉以往的suspend()和resume()方法.当然我们依然无法保证unpark()方法发生在park(0方法之后,当时执行这段代码,你会发现,它自始至终都可以正常结束,不会因为park()方法二导致线程永久性的挂起,
     这是因为LockSupport类使用类似信号量的机制,他为每一个线程准备了一个许可.这个特点使得:即使unpark()操作发生在park()之前,它也可以使下一次的park()操作立即返回.这也就是上述代码可顺利结束的主要原因.
     出来有定时阻塞的功能外,还支持中断影响,但是和其他接收中断函数不一样,他不会抛出InterruptedException异常,他只会默默的返回,但是我们可以从Thread.Interrupted()等方法获得中断标记.
public class LockSupportIntDemo {
public static Object u = new Object();
static ChangeObjectThread t1 = new ChangeObjectThread("t1");
static ChangeObjectThread t2 = new ChangeObjectThread("t2"); public static class ChangeObjectThread extends Thread {
public ChangeObjectThread(String name) {
super.setName(name);
} public void run() {
synchronized (u) {
System.out.println("in " + getName());
LockSupport.park();
if (Thread.interrupted()) {
System.out.println(getName() + " 被中断了!");
}
}
System.out.println(getName() + " 执行结束");
}
} public static void main(String[] args) throws InterruptedException {
t1.start();
Thread.sleep(100);
t2.start();
t1.interrupt();
LockSupport.unpark(t2);
}
}

最新文章

  1. 【转】SQL修改字段长度
  2. JKS TO PEM
  3. 身份证验证合法性js--已验证
  4. NEFU 503 矩阵求解 (非01异或的高斯消元)
  5. mac VPN配置
  6. 二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
  7. 【JS复习笔记】02 对象与函数
  8. 你真的用上keepalive了吗
  9. php和js的转成整数的方法
  10. JSAAS的Activiti会签开发扩展处理
  11. thinkphp5踩坑之部署到服务器模板不存在
  12. elf逆向入门
  13. 基于vue-cli的改造的多页面开发脚手架
  14. 坑人的 Javascript 模块化编程 sea.js
  15. sql语句查询菜单结果成 树状图类型 注意适用于id是四位数
  16. C语言编程题
  17. harbor使用和管理
  18. JSTL时间格式化项目小试
  19. 使用TreeView加载XML文件
  20. 总结:Python学习 和 Python与C/C++交互

热门文章

  1. MySQL的菜鸟级操作
  2. mysql 导入
  3. root权限
  4. 搜索水题四连发_C++
  5. 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】
  6. 嵌入式Linux下Camera编程--V4L2【转】
  7. python 向mysql插入数据
  8. c语言argc argv
  9. Visual Studio跨平台开发(2):Xamarin.iOS基本控制项介绍
  10. FTP-Filezilla首次配置