码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程CAS

时间:2017-05-25 23:37:17      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:.exe   调度   imp   上传   system   protected   main   string   而不是   

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

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

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

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

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

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在程序执行过程中通常会创建与所需数量相同的线程,在它回收旧线程时停止创建新线程。

并发编程CAS

标签:.exe   调度   imp   上传   system   protected   main   string   而不是   

原文地址:http://www.cnblogs.com/qducn/p/6906163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!