• 用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D...26Z


    ------------------------------第一种实现 LockSupport的park和unpark方法(**重要1**)---------------------------------------------------------------

    package com.example.demo.wxyDemo;

    import java.util.concurrent.locks.LockSupport;

    /**
    * 用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D...26Z
    */
    public class ThreadOrderSwitch {
    static Thread t1=null, t2=null;

    public static void main(String[] args) {
    char[] aI = "123456789".toCharArray();
    char[] aC = "ABCDEFGHI".toCharArray();

    t1 = new Thread(()->{
    for(char c:aI){
    System.out.print(c);
    LockSupport.unpark(t2);
    LockSupport.park();
    }
    });

    t2 = new Thread(()->{
    for(char c:aC){
    LockSupport.park();
    System.out.print(c);
    LockSupport.unpark(t1);
    }
    });

    t1.start();
    t2.start();
    }
    }

    打印结果:1A2B3C4D5E6F7G8H9I
    LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。
    为什么叫park呢,park英文意思为停车。我们如果把Thread看成一辆车的话,park就是让车停下,unpark就是让车启动然后跑起来。
    类似的还可以用类似自旋锁原理的volatile 和 AtomicInteger

    自旋锁示例:原地打转,占用cpu,不放弃cpu,(执行时间短快)不经过操作系统即内核态
    相对重量级锁:

    atomicInteger

    ===========================使用阻塞队列操作ArrayBlockingQueue======take()和put()方法阻塞======================

    
    
    ================================**重点2**使用sychnorized,wait,notify方法实现(重要)=====================================

    运行结果:1A2B3C...    或者A1B2C3...  (任一结果不确定)
    循环完了执行notify是为了停止线程,两个交替运行的话,总有一个是wait状态,导致线程无法停止,需要唤醒让线程执行完毕。
    想要输出想要的1A2B3C...,可以使用:
    (1)countDownLatch,让想要线运行的线程执行输出后latch.countDown(),后运行的线程执行latch.await()
    (2)======================**重点3**===============================
    使用可重用锁ReenTranLook的创建两个条件condition,(ReenTranLook.newCondition()),可精确的在哪种条件下通知哪些线程运行(重点)

    
    
  • 相关阅读:
    Linux cat
    Linux touch
    Win10 UAP 绑定
    Win10 资源文件
    Win10 启动模拟器
    Win10 安装Vs2015 社区版和企业版各个问题汇总
    Win10 开发者模式开启
    android 入门-本地化语言
    android 入门-基础了解
    wp8 入门到精通 定时更新瓷贴
  • 原文地址:https://www.cnblogs.com/weixy3/p/12900428.html
Copyright © 2020-2023  润新知