public class Task{
private int taskId;
private String taskName;
private char state;
// get set
}
package com.test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.task.manager.Task;
public class ThreadPool {
private List<Task> list;
public List<Task> getList() {
return list;
}
public void setList(List<Task> list) {
this.list = list;
}
private LinkedBlockingQueue<Task> taskList = new LinkedBlockingQueue<Task>();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
ExecutorService threadPool = Executors.newFixedThreadPool(1);
private Runnable workTask = new Runnable() {
public void run() {
while(!taskList.isEmpty()){
Task task = getTask();
System.out.println("获得任务:"+task.getTaskName());
list.remove(task);
task.setState('1');
list.add(task);
}
}
};
public void excute(Runnable run){
threadPool.execute(run);
}
public Task getTask() {
if(taskList.isEmpty()){
System.out.println("任务队列为空!");
}
try{
return (Task)taskList.take();
}catch(InterruptedException e){
e.printStackTrace();
}
return null;
}
public void setTask(List<Task> l){
if(l!=null&&l.size()>0){
for(int i=0;i<l.size();i++){
Task t = l.get(i);
System.out.println("增加任务:"+t.getTaskId());
addTask(t);
}
excute(workTask);
}
}
private synchronized void addTask(Task t) {
if(!taskList.contains(t)){
taskList.offer(t);
}
}
public void scheduleTask(){
scheduler.scheduleAtFixedRate(new Runnable(){
public void run() {
System.out.println("扫描任务");
List<Task> temp = getAllTaskByState('0');
setTask(temp);
}
},5,5,TimeUnit.SECONDS);
}
public void createTask(){
scheduler.scheduleAtFixedRate(new Runnable(){
public void run() {
System.out.println("定时添加任务");
Task t = new Task();
int id = 0;
synchronized(list){
if(list!=null && list.size()>0){
id = list.size()+1;
}
t.setTaskId(id);
t.setState('0');
t.setTaskName("任务"+id);
list.add(t);
}
}
},4,4,TimeUnit.SECONDS);
}
public List<Task> getAllTaskByState(char state){
List<Task> temp = new ArrayList<Task>();
synchronized(list){
for(int i = 0;i < list.size();i++){
Task t = list.get(i);
if(t.getState() == '0'){
temp.add(t);
}
}
}
return temp;
}
public static void main(String[] args){
List<Task> tempList = new ArrayList<Task>();
for(int i=0;i<20;i++){
Task tempTask = new Task();
tempTask.setTaskId(i);
tempTask.setTaskName("任务"+i);
tempTask.setState('0');
tempList.add(tempTask);
}
ThreadPool taskManager = new ThreadPool();
taskManager.setList(tempList);
taskManager.scheduleTask();
taskManager.createTask();
}
}
本人对Java线程的研究不多,很想弄懂线程相关知识,下面是本人的一个例子,还望大家指导如何学习好线程,如若有牛人提供资料,本人表示感谢
还望大家指正
分享到:
相关推荐
Java线程定时扫描Batch Task表,如果有Batch任务就执行,否则继续扫描
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
主机状态监控模块通过定时扫描方式实时监控所有主机的状态信息,并将监控结果存储在数据库中。报警处理模块根据监控结果判断主机状态是否异常,如果异常则向管理员发送报警信息并记录在报警日志中。 采用多线程技术...
475 实例124 插入和替换表单元素 476 实例125 使用线程与定时 478 实例126 J2ME绘图 480 实例127 基于J2ME的小游戏 483 实例128 建立无线HTTP连接 485 实例129 收发短信 487 实例130 获取基金...
第2章 Java与线程 案例1:一个完整的线程池的实例 案例2:鸭子凫水动画 案例3:生产者—消费者模型的简单实现 案例4:定时关机 案例5:多线程TCP端口扫描程序 案例6:一个简单的年历生成程序 案例7:...
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
实例125 使用线程与定时 478 实例126 J2ME绘图 480 实例127 基于J2ME的小游戏 483 实例128 建立无线HTTP连接 485 实例129 收发短信 487 实例130 获取基金报价 490 第12章 JNI编程 493 实例131 简单的JNI调用 494 ...
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
该存储库不再维护。...版本,支持S3版本控制,支持即时触发或定时扫描。 特色功能: 多线程传输到Amazon S3,支持恢复上传,自动重试,完全使用带宽。优化流量控制机制。典型的测试结果是在1小时内将1.2TBytes的数
java8 源码 我的 Java 学习笔记 旨在打造在线最佳的 Java 学习笔记,笔记内容主要...如果您觉得该项目对您有帮助,请扫描下方二维码对我进行鼓励,以便我更好的维护和更新,谢谢支持! TODO 计划将这个仓库进行重构,逐
java.swing的一些例子,有简单的名片管理系统、屏幕捕获工具、文本阅读器、鼠标划线、鼠标操作、计算器程序、数字时钟、动画效果与颜色的控制、鸭子戏水动画、定时关机、多线程TCP端口扫描程序 都是源码,没有额外的...
使用定时任务,定时监听,使用多线程接收不同客户端的数据,将数据处理后存入数据库。 ## py-client 客户端的脚本版本;通过WMI模块、安全配置文件、注册表、运行cmd等收集信息,并与数据库中的规则对比,进行主机...
病毒扫描 1. 实现在端系统上自动启动杀毒软件进行病毒检测及清除; 2. 实现主控台对各端系统杀毒情况的监控; 3. 实现端系统杀毒软件定时启动功能。 资产管理 1. 显示分布式网络环境中的网络互连设备资源列表,...
3.日志消息队列使用多线程消费,当到达警告数量,持久化部分日志到本地,定时扫描本地日志目录,将日志载入到消息队列中 3.存储端可自定义可配置,使用MongoDb可应对实时性的高并发写入需求 4.使用Zookeeper搭建...
至于后面定时器定时处理EventProcess表中的数据的业务逻辑就没有写了(为了快速消费可以开启多线程,用springboot的异步@Async来并发处理数据)工程使用方法:1.启动Application,这里会自动启动定时器去扫描相关表...
Google Android SDK开发范例大全(完整版) ...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...