1.什么是线程池?
用于管理线程对象的池子。
2.为什么使用线程池?
一个线程大约占用内存1M。
1.解决频繁创建线程和销毁线程消耗的性能。
2.解决大量创建线程而导致的内存泄漏问题。
3.如何创建线程池?
Java中提供了两种方式:
第一种:通过工具类完成线程池的创建-:语法简单,但是阿里巴巴不建议使用
第二种:通过线程池类-ThreadPoolWxecutor类:语法复杂,但是阿里巴巴建议使用,灵活
第一种:Executors
固定大小的线程池对象:Executors.newFixedThreadPool()
单一线程池:Executors.newSingleThreadExecutor()
可变线程池:Executors.newCachedThreadPool()
延迟线程池:Executors.newScheduledThreadPool()
第二种:ThreadPoolWxecutor
4.execute和submit方法的区别?
这两个方法都是用来执行线程任务,但是execute属于executor类中的方法,而submit属于ExecutorService接口中的方法。而且submit可以执行runnable和callable类型的任务,而execute只能执行runnable类型的任务,submit执行完成任务后有返回结果。
5.案例
标签:count,Java,name,Executors,高级,submit,线程,public From: https://blog.csdn.net/R202471/article/details/140285173public class MyTask implements Runnable{ private static int count=0; private String name; public MyTask(String name){ this.name=name; } @Override public void run() { System.out.println(name+"进入秒杀系统"); synchronized (MyTask.class){ if (count>0){ System.out.println(name+"抢到了"+count+"号手机,秒杀成功"); count--; }else { System.out.println(name+"秒杀失败"); } } } }
public class MyTest { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); for (int i = 1; i <=20; i++) { MyTask myTest = new MyTask("客户:"+i); executorService.submit(myTest); } } }