Java基础知识-- Thread和线程池的具体使用

Java Thread具体使用

(1)直接创建匿名线程使用

new Thread(){
    public void run(){
        //...
        System.out.println("Sub Thread Runnable");
    } 
}.start();

(2)使用Runnable包装待执行的任务

new Thread(new Runnable(){
     public void run(){
        //...
        System.out.println("Sub Thread Runnable");
    } 
}).start();

Java多线程介绍

参考文章 http://www.importnew.com/19011.html
java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类

概括一下线程池

corePoolSize:核心池的大小
maximumPoolSize:线程池最大线程数
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止
unit:参数keepAliveTime的时间单位,有7种取值
workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择:
(ArrayBlockingQueue;LinkedBlockingQueue;SynchronousQueue;)
threadFactory:线程工厂,主要用来创建线程;
handler:表示当拒绝处理任务时的策略,有四种取值:(ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务)

线程池使用

注意

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式使得写的时候更加明确线程池的运行规则,规避资源耗尽的风险。

//不建议的方式
ExecutorService executor = Executors.newSingleThreadExecutor();

Executors实际是对ThreadPoolExecutor的使用上的一种封装

ThreadPoolExecutor具体使用

ThreadPoolExecutor executor=new ThreadPoolExecutor(4, 6, 1, TimeUnit.HOURS, new ArrayBlockingQueue<Runnable>(10));

executor.execute(new Runnable() {  

            @Override  
            public void run() {  
                try {  
                    Thread.sleep(5000);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        });
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值