Java并发系列7

如果要让线程阻塞,我们在讲线程基础的时候已经分析过了。如果要让线程暂停呢,不是blocked,而是waiting,这时候有什么办法?
Thread类有一个弃用的方法suspend()是线程暂停的意思,他被弃用的原因是线程挂起的时候并不会释放持有的锁资源,而且suspend()挂起的线程状态依然是runnable,这也是不合理的。
那么有没有一种简单的方式可以使线程暂停呢?LockSupport就是专门来做这个的。
先来看代码:

1public class LockSupportDemo { 2 static LsThread t1 = new LsThread("t1"); 3 static LsThread t2 = new LsThread("t2"); 4 5 public static void main(String[] args) throws InterruptedException { 6 t1.start(); 7 Thread.sleep(1000); 8 t2.start(); 9 LockSupport.unpark(t1); 10 LockSupport.unpark(t2); 11 t1.join(); 12 t2.join(); 13 } 14} 15 16 class LsThread extends Thread{ 17 18 public LsThread(String name) { 19 super(name); 20 } 21 22 @Override 23 public void run() { 24 System.out.println("in "+getName()); 25 LockSupport.park(this); 26 System.out.println("out " +getName()); 27 } 28 29}

LockSupport使用起来非常简单,主要就是park()和unpark()方法。
使用LockSupport可以解决suspend()方法的弊端。


PS:我自己对于LockSupport的应用场景还不是很清晰,欢迎各位同道一起交流!

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java多线程常见问题

Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Bl

java多线程知识点总结

1\.基本知识点http://zangweiren.blog.51cto.com/412366/94386新建线程的两种方式,继续Thread类和实现runnable接口,启动线程用start方法线程状态:新建,运行,阻塞,等待,终止sleep方

android 面试题总结

Java部分一、多线程 Join() 线程加入,执行此方法的线程优先使用cpu Yeild() 线程释放资源使所有线程能有相等的机会使用cpu Sleep()相当于让线程睡眠,交出CPU,让CPU去执行其他的任务(不会释放锁)。Wait()方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限。

并发编程的基础概念

什么是线程?什么是进程?java可以开启线程吗?不能因为Java无法直接操硬件,他是运行在虚拟机上面的,什么是并发?什么是并行?并发就是多个线程去操作一个资源。并行是多个线程同时行,但是操作的资源不是同一个。线程的六个状态new(诞生)runnable(运行)Blocked(阻塞)waiiiing(等待)Tiemwaiing(超时等待)

JAVA中 ReentrantReadWriteLock读写锁详系教程,包会

一、读写锁简介现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA的并发包提供了读写锁ReentrantReadW