zoukankan      html  css  js  c++  java
  • 并发编程CAS

    首先搞明白什么是并发编程?

    并发编程是指在一台机器上同时处理多个任务。并发是指在同一个实体上的多个事件。多个事件在同一时间间隔发生。

    为什么需要并发编程(多线程编程)?

    有很多耗时的工作,如上传下载文件、与客户聊天需要建立长时间连接等。这时,一个线程是满足不了的,会因资源独占产生过多的等待 ,因此需要多线程编程。

    如果使用并发来编写程序,当一个任务阻塞时,程序中的其他任务还可以继续执行,因此这个任务还可以继续保持向前执行。

    java的线程机制是抢占式的,这表示调度机制会周期性的中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。线程可以驱动任务,定义任务要实现Runnable()接口并编写run()方法,使得改任务可以执行你的命令。

    public class LiftOff implements Runnable{
        protected int countDown=10;
        private static int taskCount=0;
        private final int id=taskCount++;
        public LiftOff(){}
        public LiftOff(int countDown){
            this.countDown=countDown;
        }
        public String status(){
            return "#"+id+"("+(countDown>0? countDown:"LiftOff!")+")";//id可以区分任务的多个实例
        }
        public void run() {
            while(countDown-- >0){
                System.out.println(status());
                Thread.yield();//线程调度器
            }
        }
    }

    Executor管理Thread对象,在客户端和任务执行之间提供了一个间接层,将由这个对象执行任务而不是客户端执行任务,允许你管理异步任务的执行,无须显式地管理线程的生命周期。

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class CachedThreadPool {
        public static void main(String[] args) {
            ExecutorService exec=Executors.newCachedThreadPool();  //FixedThreadPool使用了有限的线程集来执行所提交的任务
            for(int i=0;i<5;i++){
                exec.execute(new LiftOff());
                
            }
            exec.shutdown();
        }
    }

    结果为:

    #1(9)
    #0(9)
    #3(9)
    #2(9)
    #3(8)
    #2(8)
    #3(7)
    #2(7)
    #1(8)
    #2(6)
    #3(6)
    #0(8)
    #4(9)
    #4(8)
    #4(7)
    #4(6)
    #4(5)
    #4(4)
    #4(3)
    #4(2)
    #4(1)
    #4(LiftOff!)
    #0(7)
    #3(5)
    #3(4)
    #3(3)
    #3(2)
    #3(1)
    #2(5)
    #1(7)
    #1(6)
    #1(5)
    #1(4)
    #1(3)
    #1(2)
    #1(1)
    #1(LiftOff!)
    #2(4)
    #3(LiftOff!)
    #0(6)
    #0(5)
    #0(4)
    #0(3)
    #0(2)
    #0(1)
    #0(LiftOff!)
    #2(3)
    #2(2)
    #2(1)
    #2(LiftOff!)
    CachedThreadPool在程序执行过程中通常会创建与所需数量相同的线程,在它回收旧线程时停止创建新线程。
  • 相关阅读:
    2019年9月25日星期三(STM32 ucos3)
    2019年9月23日星期一(STM32 spi接口 rc522)
    2019年9月21日星期六(STM32 spi接口flash)
    2019年9月20日星期五(STM32 flash)
    2019年9月19日星期四(STM32 rtc实时时钟 i2c协议)
    2019年9月18日星期三(STM32 adc转换)
    2019年9月17日星期二(STM32 串口 看门狗)
    2019年9月16日星期一(STM32 串口 超声波 单总线通讯)
    2019年9月12日星期四(STM32 pwm 串口 )
    Win7/8/8.1系统中针对SSD需要禁用和改动的服务(转)
  • 原文地址:https://www.cnblogs.com/qducn/p/6906163.html
Copyright © 2011-2022 走看看