Java并发系列7

Wesley13
• 阅读 557

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

public class LockSupportDemo {
    static LsThread t1 = new LsThread("t1");
    static LsThread t2 = new LsThread("t2");
    
    public static void main(String[] args) throws InterruptedException {
        t1.start();
        Thread.sleep(1000);
        t2.start();
        LockSupport.unpark(t1);
        LockSupport.unpark(t2);
        t1.join();
        t2.join();
    }
}

 class LsThread extends Thread{
     
    public LsThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println("in "+getName());
        LockSupport.park(this);
        System.out.println("out " +getName());
    }
    
}

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


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

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java多线程常见问题
Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Bl
Wesley13 Wesley13
3年前
java多线程知识点总结
1\.基本知识点http://zangweiren.blog.51cto.com/412366/94386新建线程的两种方式,继续Thread类和实现runnable接口,启动线程用start方法线程状态:新建,运行,阻塞,等待,终止sleep方
浩浩 浩浩
3年前
android 面试题总结
Java部分一、多线程 Join() 线程加入,执行此方法的线程优先使用cpu Yeild() 线程释放资源使所有线程能有相等的机会使用cpu Sleep()相当于让线程睡眠,交出CPU,让CPU去执行其他的任务(不会释放锁)。Wait()方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限。
九鹤 九鹤
3年前
并发编程的基础概念
什么是线程?什么是进程?java可以开启线程吗?不能因为Java无法直接操硬件,他是运行在虚拟机上面的,什么是并发?什么是并行?并发就是多个线程去操作一个资源。并行是多个线程同时行,但是操作的资源不是同一个。线程的六个状态new(诞生)runnable(运行)Blocked(阻塞)waiiiing(等待)Tiemwaiing(超时等待)
Wesley13 Wesley13
3年前
Java学习笔记7
lock接口实现类ReentrantLock我们可以用lock对象,来对临界资源加锁,只有获得lock对象才能访问临界资源,如果没有获得lock对象,就会进入lock对象的锁池。trylock()方法会返回布尔值,这个方法是用来判断这个锁对象是不是已经被线程获取,如果返回值为true,则会直接获得这个锁对象,如果返回false,线程不会阻塞还会继
Wesley13 Wesley13
3年前
Java并发编程:多线程如何实现阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题。如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节。Java为我们提供了多种API来对线程进行阻塞和唤醒操作,比如suspend与resume、sleep、wait与notify以及park与unpark等等。!(
Wesley13 Wesley13
3年前
Java多线程
JavaThread状态NEW创建被创建,但是还没有开始的线程,也就是还没有调用start()方法。RUNNABLE运行就绪可运行状态,在JVM中执行,但是可能等待操作系统CPU资源。BLOCKED阻塞线程阻塞等
Wesley13 Wesley13
3年前
Java 并发编程:多线程如何实现阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题。如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节。Java为我们提供了多种API来对线程进行阻塞和唤醒操作,比如suspend与resume、sleep、wait与notify以及park与unpark等等。!(
Wesley13 Wesley13
3年前
Java线程与多线程
1线程与多线程1.1线程是什么?线程(Thread)是一个对象(Object)。用来干什么?Java线程(也称JVM线程)是Java进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。Java程序采用多线程方式来支持大量的并发请求处理,程序如果在