多线程-定时器TimerTask-死锁
定时器:
- 间隔特定的时间,执行特定的程序。
- 每周要进行银行账户的总账操作。每天要进行数据的备份操作。
- 在实际的开发中,每隔多久执行一段特定的程序,这种需求是很常见的,
- 在实际的开发中,目前使用较多的是Spring框架中提供的SpringTask框架,
- 这个框架只要进行简单的配置,就可以完成定时器的任务。
在java的类库中已经写好了一个定时器:java.util.Timer,可以直接拿来用。这种方式在目前的开发中也很少用,因为现在有很多高级框架都是支持定时任务的。
//创建一个定时器对象 Timer timer = new Timer(); //匿名内部类 timer.schedule(new TimerTask(){ },firstTime, 1000*3)
/*使用定时器指定定时任务。 */ public class TimerTest { public static void main(String[] args) throws Exception { // 创建定时器对象 Timer timer = new Timer(); //Timer timer = new Timer(true); //守护线程的方式 // 指定定时任务 //timer.schedule(定时任务, 第一次执行时间, 间隔多久执行一次); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date firstTime = sdf.parse("2020-03-14 09:34:30"); //timer.schedule(new LogTimerTask() , firstTime, 1000 * 10);//间隔十秒执行一次 //匿名内部类方式 timer.schedule(new TimerTask(){ @Override public void run() { // code.... } } , firstTime, 1000 * 10); } } // 编写一个定时任务类 // 假设这是一个记录日志的定时任务 class LogTimerTask extends TimerTask { @Override public void run() { // 编写你需要执行的任务就行了。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime = sdf.format(new Date()); System.out.println(strTime + ":成功完成了一次数据备份!"); } }
死锁:
/* 死锁代码要会写。只有会写的,才会在以后的开发中注意这个事儿。 因为死锁很难调试。synchronized 不要嵌套使用,一不小心出现死锁现象 */ public class DeadLock { public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); // t1和t2两个线程共享o1,o2 Thread t1 = new MyThread1(o1,o2); Thread t2 = new MyThread2(o1,o2); t1.start(); t2.start(); } } class MyThread1 extends Thread{ Object o1; Object o2; public MyThread1(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } public void run(){ synchronized (o1){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2){ } } } } class MyThread2 extends Thread { Object o1; Object o2; public MyThread2(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } public void run(){ synchronized (o2){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1){ } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix