黑马程序员:Java基础总结----线程池及java5的线程并发库

来源:互联网 发布:centos 7 内核版本 编辑:程序博客网 时间:2024/05/18 18:00
黑马程序员:Java基础总结



线程池及java5的线程并发库

 ASP.Net+Android+IO开发.Net培训、期待与您交流!





线程池

线程池的概念:
首先创建一些线程,它们的集合称为线程池,当服务器接受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将该线程还回到线程池中。

在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,这就是封装。记住,任务是提交给整个线程池,一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务。


Executors 方法摘要   static ThreadFactorydefaultThreadFactory()
          返回用于创建新线程的默认线程工厂。
static ExecutorServicenewCachedThreadPool()
          创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
static ExecutorServicenewCachedThreadPool(ThreadFactory threadFactory)
          创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。
static ExecutorServicenewFixedThreadPool(int nThreads)
          创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
static ExecutorServicenewFixedThreadPool(int nThreads, ThreadFactory threadFactory)
          创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,在需要时使用提供的 ThreadFactory 创建新线程。
static ScheduledExecutorServicenewScheduledThreadPool(int corePoolSize)
          创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
static ScheduledExecutorServicenewScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)
          创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
static ExecutorServicenewSingleThreadExecutor()
          创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
static ExecutorServicenewSingleThreadExecutor(ThreadFactory threadFactory)
          创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程,并在需要时使用提供的 ThreadFactory 创建新线程。
static ScheduledExecutorServicenewSingleThreadScheduledExecutor()
          创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
static ScheduledExecutorServicenewSingleThreadScheduledExecutor(ThreadFactory threadFactory)
          创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
static<T> Callable<T>privilegedCallable(Callable<T> callable)
          返回 Callable 对象,调用它时可在当前的访问控制上下文中执行给定的 callable 对象。
static<T> Callable<T>privilegedCallableUsingCurrentClassLoader(Callable<T> callable)
          返回 Callable 对象,调用它时可在当前的访问控制上下文中,使用当前上下文类加载器作为上下文类加载器来执行给定的 callable 对象。
static ThreadFactoryprivilegedThreadFactory()
          返回用于创建新线程的线程工厂,这些新线程与当前线程具有相同的权限。
static ExecutorServiceunconfigurableExecutorService(ExecutorService executor)
          返回一个将所有已定义的 ExecutorService 方法委托给指定执行程序的对象,但是使用强制转换可能无法访问其他方法。
static ScheduledExecutorServiceunconfigurableScheduledExecutorService(ScheduledExecutorService executor)
          返回一个将所有已定义的 ExecutorService 方法委托给指定执行程序的对象,但是使用强制转换可能无法访问其他方法。

接口 ExecutorService 继承的方法

voidexecute(Runnable command)
          在未来某个时间执行给定的命令。

ExecutorService service = Executors.newCachedThreadPool();
             for (int i = 1; i <= 10; i++) {
                   final int sequence = i;
                   // 仔细品味runnable对象放到循环里面和外面的区别,为了让每个对象有自己独立的编号
                  service.execute( new Runnable() {
                         public void run() {
                               try {
                                    Thread. sleep(200);
                              } catch (Exception e) {
                              }
                               for (int j = 1; j <= 5; j++) {
                                    System. out.println(Thread.currentThread().getName()
                                                + "is serving " + sequence + " task:"
                                                + "loop of " + j);
                              }
                        }
                  });


接口 ScheduledExecutorService

ScheduledFuture<?>scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
          创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。

ScheduledExecutorService scheduledService = Executors
                        . newScheduledThreadPool(1);
            scheduledService.scheduleAtFixedRate( new Runnable() {
                   public void run() {
                        System. out .println("bomb!!!" );
                  }
            }, 5, 1, TimeUnit. SECONDS );





 ASP.Net+Android+IO开发.Net培训、期待与您交流!

原创粉丝点击