zoukankan      html  css  js  c++  java
  • Java中关于LockSupport的简单入门记录

    LockSupport的JDK的文档描述:Basic thread blocking primitives for creating locks and other synchronization classes.(对于创建lock和其他同步类的基础线程原语)。在JUC中有大量使用!

    1 示例:

    在主线程中调用LockSupport.park(currentThread);将组线程阻塞,然后通过子线程完成5秒睡眠换后唤醒主线程。

    import java.util.concurrent.locks.LockSupport;
    
    public class LockSupportDemo {
    
        public static void main(String[] args) {
    
            //获取当前线程
            final Thread currentThread = Thread.currentThread();
            
            Runnable runnable = new Runnable() {
    
                @Override
                public void run() {
                    try {
                        //睡眠5秒,等待主线程调用park
                        Thread.sleep(5000);
                        System.out.println("子线程进行unpark操作!");
                        // 进行唤醒给定的currentThread线程
                        LockSupport.unpark(currentThread);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                }
            };
    
            new Thread(runnable).start();
            System.out.println("开始阻塞!");
            // 进行阻塞给定的currentThread线程
            LockSupport.park(currentThread);
            System.out.println("结束阻塞!");
    
        }
    
    }

    示例2:

    import java.util.concurrent.locks.LockSupport;
    
    public class LockSupportDemo {
    
        public static void main(String[] args) {
    
            //获取当前线程
            final Thread currentThread = Thread.currentThread();
         
            //在park之前先进行一次unpark
            LockSupport.unpark(currentThread);
             
            
            System.out.println("开始阻塞!");
            // 由于在park之前进行了一次unpark,所以会低调本次的park操作。因而不会阻塞在此处
            LockSupport.park(currentThread);
            System.out.println("结束阻塞!");
    
        }
    
    }

  • 相关阅读:
    asp.net core 2.0的认证和授权
    数据库性能优化详解
    StringUtils.defaultIfBlank
    SQL优化(二) 快速计算Distinct Count
    SQL语句中Left join,right join,inner join用法
    sql中的limit关键字
    多线程之间的资源共享
    面试长谈的String,StringBuffer,StringBuilder三兄弟有啥区别
    关于java中的值传递与引用传递遇到的问题
    Struts1和Struts2的区别和对比:
  • 原文地址:https://www.cnblogs.com/leodaxin/p/7701649.html
Copyright © 2011-2022 走看看