Java线程池的基础应用
来源:互联网 发布:omnirom源码编译 编辑:程序博客网 时间:2024/06/07 01:08
了解:原子性操作类的基础用法
在java5以后,增加很多线程的内容,成为线程得并发库。
在java.util.concurrent包及子包的API帮助文档,上面有对并发库涉及内容
在java.util.concurrent.atomic包,有对基本数据,对数组中的基本数据,类中的基本数据等的操作
AtomicIneger类,可以解决多线程访问整数的问题
AtomicBoolean.....
AtomicArray...操作数组的基本数据
AtomicIntegerFieldUodater<T>,操作类中的基本数据
并发库的基本应用:
关于线程池的理解加深
以前只是知道有线程池这个东西,并不是很了解。
第一种方式:
Executors工具类,创建一个线程池,固定的线程池
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadAtomic {public static void main(String[] args) {//5个线程的线程池ExecutorService threadPool = Executors.newFixedThreadPool(5);for(int j = 1;j<=10;j++){final int task = j;threadPool.execute(new Runnable(){public void run() {for(int i = 1;i<=10;i++){try {Thread.sleep(30);} catch (Exception e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+" is running "+i+" for task is "+ task);}}});//向池子中添加任务}System.out.println("10 task is over");}}
会发现,每次都只有5个任务在执行,执行到10次,后再换下5个任务
所以,池子中有n个线程,向池子中添加m个任务,能被执行的任务的最大数是n个,剩下的还未被执行的任务还在排队等待。而且,不结束,因为池子中还有线程,虽然没事干,但还是在等待threadPool.shutdownNow()/shutdown(),结束,就算还有任务也会被结束,该方法就是杀死池子中的所有线程。
第二种:
缓存的线程池,简单说就是线程池中的线程个数不确定,当有3个任务的时候,池子中的线程就是3个,每个线程拿一个任务做,当任务减少
时,池子中的多余线程会被回收,总之,池子中的线程是动态的
ExecutorService threadPool = Executors.newCachedThreadPool();
第三种:
只有一个线程的线程池,实际上不能叫做线程池,但是该线程池有一个好处,就是池中的线程死掉了,会自动创建一个新的线程,总之,
会保证池子中有一个线程存在,这也就可以解决,如何在线程死掉以后使其重新启动
ExecutorService threadPool = Executors.newSingleThreadExecutor();
用线程池启动定时器
调用ScheduledExectorService的schedule方法,返回的scheduleFuture对象可以取消任务
支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式
Executors.newScheduledThreadPool(3).schedule(new Runnable() {public void run() {System.out.println("ok!");}}, 3, TimeUnit.SECONDS);//3秒后打印okExecutors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("ok!");}}, 3,2, TimeUnit.SECONDS);
//3秒后ok,以后每隔2秒ok
注意它没有提供,比如今天晚上9点...的方法,所以可以用今天晚上9点的毫秒值-当前时间的毫秒值,来设置
1 0
- Java线程池的基础应用
- Java基础--线程池的应用
- java线程池的简单应用基础篇
- java基础--28.线程池简介以及实际应用
- Java的线程应用
- java 线程的基础
- Java线程池应用
- Java线程池应用
- Java线程池应用
- Java线程池应用
- Java线程池CompletionService的简单应用
- java线程池的应用示例
- Java/Android中线程池的应用
- java线程池的种类和应用
- Java线程池的简单应用
- JAVA线程池应用的DEMO
- Java基础-线程池
- Java基础----线程池
- SQL日期时间格式自由转换大全
- HDU 5141 LIS again(dp+线段树)
- Android 之手势识别篇-GestureDetector
- 博弈论——取石子问题
- eclipse为java设置语法高亮
- Java线程池的基础应用
- KMP算法
- 什么是缓冲区?
- 折线划分平面
- 基于注解的SpringMVC整合JPA
- SQL Server游标的使用
- [学习笔记]Java多线程
- Time Series DataBase Overview
- 括号配对问题