当前位置:首页 » 编程语言 » java定时线程

java定时线程

发布时间: 2022-09-26 09:31:24

java定时让线程停止

我这儿有一个过年前写的定时关机程序你可以拿去参考下~
程序里的取消功能跟你要的差不多

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
* 此类为定时关机的主界面类
* 这几天一直都在搞我的聊天程序,哎 但是技术问题,一直都做不走
* 之前一直都想写个定时关机程序,一直都是没时间,
* 现在那边做不走了,我就做做这个简单的,找点自信
* @author 程胜
* @date 09年1月24
* @address 家
* @version 0.1
*
*/
public class ShutDown extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel pCenter=new JPanel();
private JPanel pNorth=new JPanel();
private JPanel pSouth=new JPanel();
private JButton bExit=new JButton("退出");
//用于显示当前时间
JLabel currentTime=new JLabel();
JButton bStart=new JButton("启动");
JButton bCancel=new JButton("取消");
JLabel info=new JLabel("请设定关机时间…………");
//此下拉框用于选择关机的小时
JComboBox hour=null;
//此下拉框用于先择关机的分钟
JComboBox minute=null;
/**
* 构造函数初始化界面
*/
public ShutDown(){
super("定时关机小程序verson0.1");
this.setSize(250,150);
addContent();
addEvent();
//改变大小不可用
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(this);
this.setVisible(true);

}
/**
* 为按钮添加事件监听
*/
private void addEvent() {
ActionListener buttonListen=new SetEvent();
bStart.addActionListener(buttonListen);
bCancel.addActionListener(buttonListen);
bExit.addActionListener(buttonListen);

}
/**
* 为界面添加内容
*/
private void addContent() {
//新建一个匿名线程,用于显示当前时间
new Thread(new Runnable(){
public void run(){
SimpleDateFormat sdf=new SimpleDateFormat("MM'月'dd'日'HH:mm:ss");
//Thread.interrupted()为判断线程是否中断
while(!Thread.interrupted()){
//获取当前时间
Calendar current=Calendar.getInstance();
ShutDown.this.currentTime.setText("当前时间为:"+sdf.format(current.getTime()));
try {
//休眠一秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}).start();
//新建用于显示小时和分钟的字符串数组
String[] lHour=new String[24];
String[] lMinute=new String[60];

for(int i=0;i<24;i++){
lHour[i]=i+"";
}
for(int i=0;i<60;i++){
lMinute[i]=i+"";
}
hour=new JComboBox(lHour);
minute=new JComboBox(lMinute);
JLabel xiaoshi=new JLabel("时");
JLabel fen=new JLabel("分");
bCancel.setEnabled(false);
pNorth.setLayout(new FlowLayout());
pNorth.add(new JLabel("请设定关机时间:"));
pNorth.add(hour);pNorth.add(xiaoshi);
pNorth.add(minute);pNorth.add(fen);
pSouth.add(bStart);pSouth.add(bCancel);pSouth.add(bExit);
pCenter.setLayout(new GridLayout(2,1));
pCenter.add(currentTime);
pCenter.add(info);
this.add(pCenter,"Center");
this.add(pNorth,"North");
this.add(pSouth,"South");

}
/**
* @param args
*/
public static void main(String[] args) {
//设置外观
JFrame.(true);

new ShutDown();

}
/**
* 内置类,用于处理事件
* @author 程胜
*
*/
class SetEvent implements ActionListener{
//用于存放关机的操作类
private Shut shut=null;
private String hour="";
private String minute="";
//获得界面类
private ShutDown shutDown=ShutDown.this;
public void actionPerformed(ActionEvent e) {
//如果事件为启动按钮触发
if(e.getSource()==bStart){
//获取下拉框中的数据
hour=shutDown.hour.getSelectedItem().toString();
minute=shutDown.minute.getSelectedItem().toString();

handleStart();
}else{
//如果事件为取消按钮触发
if(e.getSource()==bCancel){
//取消操作
handleCancel();

}else{
//如果事件为退出按钮触发,则退出系统
System.exit(0);
}
}

}

/**
* 取消按钮的事件的处理方法
*/
private void handleCancel() {
//如果关机类还在活动
if(shut.isAlive()){
//停止关机类线程
shut.stop();
}
//修改界面显示
shutDown.info.setText("您取消了之前设定的定时关机!");
shutDown.hour.setEnabled(true);
shutDown.minute.setEnabled(true);
shutDown.bStart.setEnabled(true);
shutDown.bCancel.setEnabled(false);

}

/**
* 启动按钮的事件的处理方法
*/
private void handleStart() {

shutDown.info.setText("您设置的关机时间是"+(hour.length()==1?"0"+hour:hour)+"时"+(minute.length()==1?"0"+minute:minute)+"分");
shutDown.hour.setEnabled(false);
shutDown.minute.setEnabled(false);
shutDown.bStart.setEnabled(false);
shutDown.bCancel.setEnabled(true);
//新建并启动关机线程
shut=new Shut(Byte.parseByte(hour),Byte.parseByte(minute));
shut.start();

}

}

}
/**
* 此类为实现关机操作的类,是一个线程类
* @author Administrator
*
*/
class Shut extends Thread{
//获取当前日期及时间
private Calendar shutTime=Calendar.getInstance();
private Calendar currentTime;
private byte hour=0;
private byte minute=0;
public Shut(byte hour,byte minute){
this.hour=hour;
this.minute=minute;
}
/* 覆写run方法
*
*/
public void run(){
//调用关机时间处理方法
handleTime();
while(!Thread.interrupted()){
//循环获取系统时间
currentTime=Calendar.getInstance();
//如果关机时间在当前时间之前
if(shutTime.before(currentTime)){
//调用关机方法
shutDown();
//退出系统
System.exit(0);
}
try {
//线程休眠一秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 关机方法
*/
private void shutDown() {
String shutdown="shutdown -s";
Runtime rt=Runtime.getRuntime();
try {
rt.exec(shutdown);
} catch (IOException e) {
e.printStackTrace();
}

}
/**
* 用于计算关机的时间
*/
private void handleTime() {
java.util.Date date=new java.util.Date();
if(date.getHours()>hour){
date.setDate(date.getDate()+1);
}if(date.getHours()==hour){
if(date.getMinutes()>minute){
date.setDate(date.getDate()+1);
}
}
date.setHours(hour);date.setMinutes(minute);
date.setSeconds(0);
shutTime.setTime(date);
}
}

Ⅱ java定时线程占用服务器资源吗

会占资源,但是不会占很多。就是开一个线程的开销。它sleep的时候,会释放cpu的

Ⅲ java定时执行一个方法

现在能想到的是三种方法能实现:
1、普通thread实现 :是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。
2、TimerTask :启动和去取消任务时可以控制,第一次执行任务时可以指定你想要的delay时间。
3、ScheledExecutorService实现 :最理想的定时任务实现方式,相比于Timer的单线程,它是通过线程池的方式来执行任务的,可以很灵活的去设定第一次执行任务delay时间,提供了良好的约定,以便设定执行的时间间隔等。
希望能帮到你。

Ⅳ java定时任务使用多线程webservcie执行了两次这是为什么

java Timer定时器是线程方式实现的。你可以把间隔时间调大点。如果操作数据库的话,可以再数据库的记录上加上标记字段,表示记录正在处理。

Ⅳ java定时器与线程的区别

javax.swing.Timer
尽管所有 Timer 都使用一个共享线程(由第一个执行操作的 Timer 对象创建)执行等待,但是 Timer 的动作事件处理程序还会在其他线程(事件指派线程上)执行。这意味着 Timer 的操作处理程序可以安全地在 Swing 组件上执行操作。但是,它也意味着处理程序必须快速执行以保证 GUI 作出响应。
java.util.Timer
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
简单理解,javax.swing.Timer没有增加线程,利用事件线程的间隙运行,java.util.Timer增加线程了。

Ⅵ java中怎么让一个线程在每天的23:30这个时刻执行一次(该程序启动后就不会轻易停下来)

timer.schele(你的线程名称,要执行的时间,24*60*60*1000); 你最好去看看timer定时器,以便了解更多

Ⅶ java中模拟一个定时炸弹线程,接收控制台输入错误。

第一次运行时如果什么都不输入,直接Enter键,line会为空字符串。调用可能会出错。

if(line.equals("quit")){
改为
if(line!=null &&line.equals("quit")){

Ⅷ 用java编程实现两个定时线程,一个线程每隔1秒显示一次,另一个线程每隔3秒显示一次

public class Test {

Thread th1 = new Thread(new Th1());//定义线程1
Thread th2 = new Thread(new Th2());//定义线程2

public Test() {
this.th1.start();
this.th2.start();
}
public static void main(String[] args) {
new Test();
}
// 线程1
class Th1 implements Runnable {

public void run(){

while(true){
System.out.println("我是线程1");
try {
th1.sleep(1000);//一秒后再此运行
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
// 线程2
class Th2 implements Runnable {

public void run(){
while(true){
System.out.println("我是线程2");
try {
th2.sleep(3000);//3秒后再此运行
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}

Ⅸ 如何使用Java线程执行定时任务及线程调动和同步

class Mytask1 extends Timertask { ①

public void run() {

System.out.println(”5 秒之后执行的定时器“);

}

}

Class Mytask2 extends Timertask {

public void run(){

System .out,println(”每秒执行的定时器”);

}

}

class Mytask3 extends Timertask {

public void run () {

System.out.println(”从某日起每分钟执行的定时器!”) ;

}

}

public class TimerDemo {

plublic static void main(String[] args) {

Timer timer = new Timer( ) ; ②

timer.schele(new Mytask1( ) ,5000); ③

timer,schele(new Mytask1( ) ,1000,1000) ; ④

timer,schele(new Mytask1( ) ,new Dateo ( ) , 1000 * 60) ; ⑤

}

}

热点内容
资本论中央编译局 发布:2025-05-13 19:21:50 浏览:132
python路径是否存在 发布:2025-05-13 19:08:38 浏览:570
保时捷卡宴哪个配置比较好 发布:2025-05-13 19:00:08 浏览:725
c语言负数运算 发布:2025-05-13 18:45:21 浏览:428
太空杀电脑版连接不到服务器 发布:2025-05-13 18:40:19 浏览:457
同样的配置为什么跑分不同 发布:2025-05-13 18:39:06 浏览:278
获取linuxcpu序列号 发布:2025-05-13 18:36:35 浏览:738
appleid为什么连接服务器出现问题 发布:2025-05-13 18:17:37 浏览:971
书翁怎么配置 发布:2025-05-13 18:17:36 浏览:911
云数据库mongodb 发布:2025-05-13 18:16:12 浏览:774