1、首先,不用创建线程类也可以开启一个小的线程,直接写在main方法里,new一个Thread就可以了,这是最简单的开启线程的方式。
2、使用继承的方式创建线程类,其启动方式。
3、使用实现接口的方式创建线程类,启动方式就变了
4、最后来看一下线程池的方式,线程池有镉胶鱿瓜几个参数,其含义要注意一下,corePoolSize 核心池数量;maximumPoolSize:最大池数量;keepAlive皈其拄攥Time:存活时间(指的是线程池当前活动的线程数量超过了corePoolSize,线程池会关闭存活时间超过keepAliveTime的活动线程);TimeUnit:时间单位(秒或者毫秒等,是个枚举类型);BlockingQueue:阻塞队列(当线程并发较多时,当前活动的线程处理不了,部分线程会放进阻塞队列等待执行(理论上是当请求大于maximumPoolSize时,多余的会放在阻塞队列中),当阻塞队列放满时(请求数>maximumPoolSize+阻塞数量),多余的线程就会直接被拒绝掉。可以设置阻塞队列的大小,阻塞队列也可以无界,这样就不会有线程被拒绝。);RejectedExecutionHandler:阻塞队列放满了,还有多余的线程,就会交给这个东西处理,我们也可以写自己的拒绝处理类。
5、我们写个线程池测试一下阻塞的情况,猜一猜是否会有线程被拒绝。线程类使用ThreadClass1,接我们自定义一个处理拒绝线程的类TestRejectedExecutionHandler
6、编写TestThreadPool2,开启线程。注意要shutDown线程池,否则程序不会终止。
7、输出结果,和我们猜的差不多吧。9>2+6,所以第九个被拒绝了。还有一点要注意就是设置了一个30毫秒的延迟,这样就保证了有两个正在执行,有6个放在阻塞队列,还有一个被kill掉。