java中并发编程的一些总结

来源:互联网 发布:im即时通讯源码java 编辑:程序博客网 时间:2024/05/17 08:53
  1. 列表内容

    传统的顺序编程,程序在任意时候都只能执行一个步骤。在一些需要同时运行的操作,仿真或者处理用户响应的时候就捉襟见肘了。所以并发也就应运而生了。Java允许在单一进程上创建多个线程,其一大优点就是在不支持多任务的系统里依然可以依靠多线程来实现并发编程。
    Java中线程机制是抢占式的,表示Java调度机制会间歇性的暂停当前线程以为其他 线程提供运行机会。这样相当于分割了若干时间片,各个线程在自己的时间片内运行,从而表现出同时运行的特点。这点在拥有多核处理器的系统中又有着不同,多个核心会分配多个线程,从而实现真正的并发。
    实现并发,只需要简单的实现Runnable就行了,通过实现run()方法来执行你的代码,下面是一个简单的计数程序

public class Count implements Runnable{    private int sumCount = 10;    private static int taskCount = 0;    private final int id = taskCount++;    public void run(){        while(sumCount > 0){            System.out.println("线程" + id + "计数" + sumCount--);        }    }}
但这样定义并不能产生任何线程的能力,仅仅是声明了一个Runnable接口的实现类罢了。要生产线程需要用到Thread类。我们通过将Runnable对象传入到Thread的构造器中,通过其start()方法完成必要的初始化操作,然后调用了Runnable的run()方法来在一个新的线程中启动任务。并可以很容易的添加更多的线程。可以在以上代码中添加如下main方法
Thread t1 = new Thread(new LiftOff());        Thread t2 = new Thread(new LiftOff());        Thread t3 = new Thread(new LiftOff());        Thread t4 = new Thread(new LiftOff());        Thread t5 = new Thread(new LiftOff());        t1.start();        t2.start();        t3.start();        t4.start();        t5.start();
可以看到不同的线程混合到了一起,这种切换是由线程调度器自动进行的。在java.util.concurrent包中提供了Exetucor(执行器)类,它在客户端和任务执行之间提供了一个间接层,来管理线程的执行。通过ExecutorService来管理你的线程。在Exetucor的实现类中定义了获取ExecutorService实现类对象的方法:1.Exetucors.newCacheThreadPoll()为每个任务创建一个线程。2,Exetucors.FixedThreadPoll()创建有限多个线程。3.Exetucors.newSingleThreadExetucor创建单一线程。需要注意的是,在任何线程池中,现有线程在有可能的情况下都会被复用。