当前位置: 首页 > wzjs >正文

查看网站cms苏州公司建设网站

查看网站cms,苏州公司建设网站,电商公司网站建设财务核算,手机网页开发者模式项目中很多地方使用了线程池,线程之间一般没有交集,如果线程间有共享变量或者共享资源,如何实现线程之间通信,如何保障共享资源的安全性。 目录 1. 创建线程的方式 1.1继承Thread 1.2实现Callable 1.3实现Runnable 1.4创建线…

项目中很多地方使用了线程池,线程之间一般没有交集,如果线程间有共享变量或者共享资源,如何实现线程之间通信,如何保障共享资源的安全性。

目录

1. 创建线程的方式

1.1继承Thread

1.2实现Callable

1.3实现Runnable

1.4创建线程池

2. 线程池参数

2.1 固定大小的线程池

2.2 单线程池

2.3 可缓存线程池

2.4 定时任务线程池

2.5 自定义线程池(ThreadPoolExecutor)


1. 创建线程的方式

1.1继承Thread

Thread是java.lang包中的类,实现了Runnable接口,并重写了run方法。

所以可以直接继承Thread类,并重写Thread类中的run方法即可,如下

public class MyThread extend Thread{//重新Thread类中的方法run()@Overridepublic void run(){System.out.printIn("--线程执行的内容--");}
}public class myObject{MyThread t = new MyThread();t.start();
}

1.2实现Callable

Callable是java.util.concurrent并发包中的接口

通过 FutureTask 获取线程执行结果,支持异常抛出,需要异步任务返回结果时,需要将Callable封装到FutureTask中,因为Thread类构造器只接收Runnable参数,FutureTask继承Runable接口

public class MyCallable implement Callable<String>{@Overridepublic String call() throws Exception{return "执行call方法";}
}//使用FutureTask封装
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
Thread t = new Thread(futureTask);
t.start();
//获取执行结果
String resutl = futureTask.get();

1.3实现Runnable

其中Runnable接口中只有一个抽象方法run(),无返回值

public class MyRunnable implement Runnable{@Overridepublic void run(){//执行的内容System.out.println("执行内容");}
}
//使用
Thread t = new Thread(new MyRunnable());
t.start();
//使用lambda表达式
new Thread(()->{System.out.println("执行内容")}).start();

1.4创建线程池

使用submit提交任务到线程池,可以获取到执行结果数据;submit方法接收Callable参数,submit也可以接收无返回值的Runnable

<T> Future<T> submit(Callable<T> task);                Future<?> submit(Runnable task);

//创建线程池
ExecutorService executorService = new ThreadPoolExecutor(32,32,0L,TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(1000),new ThreadPoolExecutor.CallerRunsPolicy());//线程池中提交任务,需要返回值的用submit,往线程池中提交100次任务
List<Future<String>> futures = new ArrayList<>();
for(int i = 0;i<100;i++){futures.add(executorService.submit(()->{return "执行内容";}));
}
//获取结果
List<String> result = new ArrayList<>();
for(Future<Stirng> future : futures){try{result.add(future.get());}catch(Exception e){//}
}

也可以用Executor中的方法void execute(Runnable command)提交任务;

对比总结:

方式优点缺点适用场景
继承 Thread简单直接单继承限制,扩展性差简单测试(不推荐生产使用)
实现 Runnable解耦任务,支持 Lambda无返回值大多数异步任务
实现 Callable支持返回值和异常需配合 FutureTask 使用需要结果反馈的任务
线程池资源可控,性能最优需手动配置参数高并发生产环境

2. 线程池参数

2.1 固定大小的线程池

  • 创建方式
    ExecutorService executor = Executors.newFixedThreadPool(int nThreads);
  • 特点
    • 线程数量固定(nThreads),即使有空闲线程也不会回收。
    • 任务队列是无界的(LinkedBlockingQueue),可能导致内存溢出(OOM)。
  • 适用场景
    • 适合处理长期稳定的并发任务(如服务器请求处理)。

2.2 单线程池

  • 创建方式
    ExecutorService executor = Executors.newSingleThreadExecutor();
  • 特点
    • 只有一个工作线程,保证任务按提交顺序串行执行。
    • 任务队列无界(LinkedBlockingQueue)。
  • 适用场景
    • 需要保证任务顺序执行的场景(如日志写入)。

2.3 可缓存线程池

  • 创建方式
    ExecutorService executor = Executors.newCachedThreadPool();
  • 特点
    • 线程数量动态扩展(空闲线程默认60秒回收)。
    • 任务队列不存储任务(SynchronousQueue),直接交给线程执行。
    • 极端情况下可能创建大量线程,导致资源耗尽。
  • 适用场景
    • 短时异步任务(如HTTP请求)。

2.4 定时任务线程池

  • 创建方式
    ScheduledExecutorService executor = Executors.newScheduledThreadPool(int corePoolSize);
  • 特点
    • 支持定时或周期性任务(如scheduleAtFixedRate)。
    • 核心线程数固定,非核心线程空闲时回收。
  • 适用场景
    • 定时任务(如心跳检测、数据同步)。

2.5 自定义线程池(ThreadPoolExecutor)

  • 创建方式
    ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,      // 核心线程数maximumPoolSize,   // 最大线程数keepAliveTime,     // 空闲线程存活时间TimeUnit,          // 时间单位workQueue          // 任务队列(如ArrayBlockingQueue)
    );
    
  • 特点
    • 完全可控的参数(队列类型、拒绝策略等)。
    • 避免无界队列导致的OOM问题。
  • 适用场景
    • 需要精细控制线程池行为的场景。

文章转载自:

http://w0MPotNd.ckdgj.cn
http://mwCLrMx0.ckdgj.cn
http://ny3akAhz.ckdgj.cn
http://sKD5ZEHk.ckdgj.cn
http://7SilKqrm.ckdgj.cn
http://0k1ptiPj.ckdgj.cn
http://I82xyH5C.ckdgj.cn
http://mwOdw7rZ.ckdgj.cn
http://ZhxyD5tt.ckdgj.cn
http://gQl2OSNL.ckdgj.cn
http://c3x9X8Dr.ckdgj.cn
http://6YUB2EiH.ckdgj.cn
http://FN09NDHh.ckdgj.cn
http://7t3xtrHX.ckdgj.cn
http://7N1ghgy2.ckdgj.cn
http://LrmbBs1X.ckdgj.cn
http://XsvQZ3Tb.ckdgj.cn
http://Cmkt1EGP.ckdgj.cn
http://qFkgDXnR.ckdgj.cn
http://TKevvX1T.ckdgj.cn
http://flPxjmbp.ckdgj.cn
http://8cuqwsJS.ckdgj.cn
http://k2ekqrYr.ckdgj.cn
http://dc6Bd31x.ckdgj.cn
http://fMGolcuR.ckdgj.cn
http://eZDAvwpr.ckdgj.cn
http://nh70EH3B.ckdgj.cn
http://qdyS1Kes.ckdgj.cn
http://EKTXtZAX.ckdgj.cn
http://zYCoRq6c.ckdgj.cn
http://www.dtcms.com/wzjs/677694.html

相关文章:

  • 泉州网站建设兼职厦门海绵城市建设官方网站
  • 泉州网站制作建设北京58网站建设
  • 那个网站做网编好官方网站建设项目询价
  • 乌海网站建设公司徐州建设工程交易网张周
  • 京东电子商务网站建设网页设计站
  • 人与马做的网站在线海报设计
  • 哪有免费的网站广州海珠做网站的公司
  • 南宁建设厅网站分销小程序开发研发公司
  • 中国域名网站三明网站设计
  • 自己免费怎么制作网站吗自己做的网站和ie不兼容
  • 公司经营范围网站开发及运营西安网站制作公司怎么选
  • jquery做的装修网站店铺图片设计
  • 西安有哪些网站建设公司wordpress文中广告
  • 网站建设文献翻译婚纱摄影行业网站建设
  • 网站开发工程师asp考试试题wordpress 微商
  • 做商品网站需要营业执照怎么恢复wordpress设定值
  • 网站国外建设企业网站建设排名口碑
  • 怎样建立一个网站步骤上海网站建设公司服务怎么做
  • 抚宁区建设局网站欧美风格网站设计
  • 哪个网站可以做英文兼职网店推广教材
  • 长安高端装备网站设计公司网站建设需求分析写什么
  • 响应式网站建设软文企业介绍ppt案例欣赏
  • 来年做那个网站致富小米开发者模式
  • 东兰县建设局网站做海报的软件app免费
  • 网站demo要几个人做大庆金思维科技网站开发
  • 微信里的网站怎么做铜川公司做网站
  • 广州网站建设有哪些做网站公司赚钱吗
  • 做网页做网站的技术人才网页制作教程
  • 可以免费打开网站的软件成都设计网站建设
  • 网站备案 更改ip崇信县门户网站最新留言