Java定时器将线程死循环,固定时间后唤醒一次

线程(死循环)执行后等待 使用计时器控制 5s后唤醒,重复执行

方法一
public class Test {
public static void main(String[] args) {		
		Lock lock=new Lock();//创建锁对象
		//实现runnable接口,实现runnable方法
		Runnable rb=new Runnable() {			
			@Override
			public void run() {
				while(true){//让线程一直等待
					try {
						Thread.sleep(1000);
					} catch (Exception e) {						
						e.printStackTrace();
					}
					synchronized (lock) {
						System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date().getTime()));//输出时间
						try {
							lock.wait();//进入等待
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}				
			}
		};
		Thread th=new Thread(rb);		
		th.start();//启动线程
		Timer t=new Timer();
		t.schedule(new TimerTask() {			
			@Override
			public void run() {
				System.out.println("唤醒");
				synchronized (lock) {
					lock.notify();//唤醒线程
				}	
			}
		}, 3000,5000);	//运行后3s后实行,每5s唤醒一次,重复执行
	}
}
//创建锁,同级类
class Lock{
	}
方法二,使用多线程
public class Test0_3 {
	public static void main(String[] args) {
		//定义闹钟。实现指定时间执行,之后每次间隔延迟5分钟执行3次
		//(第一次执行后 5秒钟后继续执行,第二次执行后10秒钟后再次执行,第三次执行后15秒后再次执行之后关闭)
		Lock11 lock=new Lock11();
		Timer tt=new Timer();
		tt.schedule(new TimerTask() {
			@Override
			public void run() {
				synchronized (lock) {
			lock.notifyAll();					
				}
			}
			}, new Date(), 1);//让其立即执行,一直重复执行		
		Th11 t1=new Th11(lock);
		t1.start();		
	}


}
class Th11 extends Thread{
	 Lock11 lock;
	
	public Th11(Lock11 lock2) {
		super();
		this.lock = lock2;
	}


	@Override
	public void run() {
		synchronized (lock) {
			int i=0;
		while(true){
			try {				
				System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()));
				lock.wait();//等待
				Thread.sleep(i+=5000);//每次多休眠5秒后释放锁,唤醒其它线程
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}}
}
//同级类 创建锁
class Lock11{}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值