欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

个人理解线程池

程序员文章站 2024-02-28 12:19:22
...

     一, 线程池   

       线程池的主要四个方法,基本实现  没有弄太明白,四个方法只是实现顺序不同其他没有感觉有太大区别

---------------------------------------------------------------------------------------------------------------------------------------------------------

newSingleThreadExecutor

创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

newFixedThreadPool

创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

newCachedThreadPool

创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,

那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。

newScheduledThreadPool

创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

参考链接:https://www.jianshu.com/p/d3a634e7d4dc
来源:简书
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.example.administrator.myapplication.R;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Main2Activity extends AppCompatActivity {
    private static final String TAG="Main2Activity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Threadpools t=new Threadpools();
      //  t.xianc();
        //t.mainD();
        //t.mainAQ();
        t.main();

    }
   public static class  ThreadForpools implements Runnable{
       private Integer index;

       public ThreadForpools(Integer index) {
           this.index = index;
       }

       @Override
       public void run() {
           try {
               Log.e(TAG, "开始处理线程!!! ");
               Thread.sleep(index*100);
               Log.e(TAG,"我的线程标识是:"+this.toString());
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
   }
    public class Threadpools{
        /**
         * 我们获取四次次线程,观察4个线程地址
         *
         */
        public  void xianc(){
            ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
            Log.e(TAG,"****************************newCachedThreadPool*******************************");
            for(int i=0;i<4;i++)
            {
                final int index=i;
                newCachedThreadPool.execute(new ThreadForpools(index));
            }
        }
        /**
         * 我们获取四次次线程,观察4个线程地址
         *
         */
        public void mainD(){
            //线程池允许同时存在两个线程
            ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
            Log.e(TAG,"****************************newFixedThreadPool*******************************");
            for(int i=0;i<4;i++)
            {
                final int index=i;
                newFixedThreadPool.execute(new ThreadForpools(index));
            }
        }
        /**
         * 我们获取四次次线程,观察4个线程地址
         *
         */
        public void mainAQ()
        {
            ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
            Log.e(TAG,"****************************newFixedThreadPool*******************************");
            for(int i=0;i<4;i++)
            {
                final int index=i;
                //延迟三秒执行
                newScheduledThreadPool.schedule(new ThreadForpools(index),3, TimeUnit.SECONDS);
            }
        }
        /**
         * 我们获取四次次线程,观察4个线程地址
         *
         */
        public   void main() {
            ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();
            Log.e(TAG,"****************************newFixedThreadPool*******************************");
            for(int i=0;i<4;i++)
            {
                final int index=i;
                newSingleThreadExecutor.execute(new ThreadForpools(index));
            }
        }
    }


}

 

相关标签: 个人学习