十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
计时器,每分钟或每秒执行一次,获取当前系统时间,判断是 6.30 的话,响。。
10余年的重庆网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整重庆建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“重庆网站设计”,“重庆网站推广”以来,每个客户项目都认真落实执行。
quartz 作业jar包。设定执行作业时间,设定执行内容,然后运行。
其他作业实现。
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date nowdate = new Date();//系统当前时间
java.util.Date begin=dfs.parse("2015-12-25 12:30:00");//闹钟设置时间可以获取,我暂时写死
java.util.Date end = dfs.parse(nowdate);
long between=(begin.getTime()-end.getTime())/1000;//除以1000是为了转换成秒
long day1=between/(24*3600);
long hour1=between%(24*3600)/3600;
long minute1=between%3600/60;
long second1=between%60/60;
System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class TestDate {
public static final String[] weeks = { "日", "一", "二", "三", "四", "五", "六" };
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,2011);//2011年
c.set(Calendar.MONTH,0);//java中Calendar类,月从0开始, 0代表一月
c.set(Calendar.DATE,1);//1号
int day = c.get(Calendar.DAY_OF_WEEK);//获致是本周的第几天地, 1代表星期天...7代表星期六
System.out.println(new SimpleDateFormat( "yyyy-MM-dd ").format(c.getTime()));
System.out.println("星期" + weeks[day-1]);
}
}
把以上测试代码写作一个方法 方法的参数名为年月日, 即可。当然Calendar 还有很多功能,比如一周的第几天,一年的第几个月……
public class ThreadPoolManager {
private static ThreadPoolManager instance = null;
private ListUpload taskQueue = Collections.synchronizedList(new LinkedListUpload());//任务队列
private WorkThread[] workQueue ; //工作线程(真正执行任务的线程)
private static int worker_num = 6; //工作线程数量(默认工作线程数量是6)
private static int worker_count = 0;
private ThreadPoolManager(){
this(6);
}
private ThreadPoolManager(int num){
worker_num = num;
workQueue = new WorkThread[worker_num];
for(int i=0;iworker_num;i++){
workQueue[i] = new WorkThread(i);
}
}
public static synchronized ThreadPoolManager getInstance(){
if(instance==null)
instance = new ThreadPoolManager();
return instance;
}
public void addTask(Upload task){
//对任务队列的操作要上锁
synchronized (taskQueue) {
if(task!=null){
taskQueue.add(task);
taskQueue.notifyAll();
System.out.println("task id "+task.getInfo() + " submit!");
}
}
}
public void BatchAddTask(Upload[] tasks){
//对任务队列的修改操作要上锁
synchronized (taskQueue) {
for(Upload e:tasks){
if(e!=null){
taskQueue.add(e);
taskQueue.notifyAll();
System.out.println("task id "+e.getInfo() + " submit!");
}
}
}
}
public void destory(){
System.out.println("pool begins to destory ...");
for(int i = 0;iworker_num;i++){
workQueue[i].stopThread();
workQueue[i] = null;
}
//对任务队列的操作要上锁
synchronized (taskQueue) {
taskQueue.clear();
}
System.out.println("pool ends to destory ...");
}
private class WorkThread extends Thread{
private int taksId ;
private boolean isRuning = true;
private boolean isWaiting = false;
public WorkThread(int taskId){
this.taksId= taskId;
this.start();
}
public boolean isWaiting(){
return isWaiting;
}
// 如果任务进行中时,不能立刻终止线程,需要等待任务完成之后检测到isRuning为false的时候,退出run()的方法
public void stopThread(){
isRuning = false;
}
@Override
public void run() {
while(isRuning){
Upload temp = null;
//对任务队列的操作要上锁
synchronized (taskQueue) {
//任务队列为空,等待新的任务加入
while(isRuningtaskQueue.isEmpty()){
try {
taskQueue.wait(20);
} catch (InterruptedException e) {
System.out.println("InterruptedException occre...");
e.printStackTrace();
}
}
if(isRuning)
temp = taskQueue.remove(0);
}
//当等待新任务加入时候,终止线程(调用stopThread函数)造成 temp = null
if(temp!=null){
System.out.println("task info: "+temp.getInfo()+ " is begining");
isWaiting = false;
temp.uploadPic();
isWaiting = true;
System.out.println("task info: "+temp.getInfo()+ " is finished");
}
}
}
}
}
复制代码
然后定义任务接口(Task):这里我定义的是上传图片的功能接口(这里用抽象类或者接口随你自己).
Upload
然后定义具体任务类:我这里简单,让它睡眠2秒钟。当然你也可以定义很多实现Upload的任务类。
TaskUpload
测试这个简单的线程池:
public class ThreadPoolManagerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Upload[] tasks = createBatchTask(7);
ThreadPoolManager pool = ThreadPoolManager.getInstance();
pool.BatchAddTask(tasks);
pool.destory();
}
private static Upload[] createBatchTask(int n){
Upload[] tasks = new TaskUpload[n];
for(int i = 0;in ;i++ ){
tasks[i] = new TaskUpload("我的工作线程 "+ i);
}
return tasks;
}
}