zoukankan      html  css  js  c++  java
  • 用两个线程,一个输出字母,一个输出数字,交替输出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()),可精确的在哪种条件下通知哪些线程运行(重点)

    
    
  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/weixy3/p/12900428.html
Copyright © 2011-2022 走看看