1.Thread类与Runnable接口的关系
run()方法 线程执行的代码封装在run()方法中
start()方法 启动线程的run()方法
Thread类实现了Runnable接口覆写了其中的run()方法,
因此在调用的时候,被引用的对象(即new出来的Thread对象)
的run()方法优先执行。
代码如下:
public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(1000); System.out.println("a:" + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }) { @Override public void run() { while (true) { try { Thread.sleep(1000); System.out.println("b:" + Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } }; thread.start(); }
控制台结果:b:Thread-0
2.util包中的定时器Timer类
util包中TimerTask类的run()方法 任务执行的代码封装在run()方法中,类似于线程的run()方法
Timer类中的schedule()方法 启动任务的run()方法, 类似于线程的start ()方法
class myTimerTask extends TimerTask{ @Override public void run() { count=(count+1)%2; System.out.println("bombing!"); new Timer().schedule(new myTimerTask(), 2000*(count+1)); } } new Timer().schedule(new myTimerTask(),2000); while(true){ System.out.println(new Date().getSeconds()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
代码类似于递归,每个内部类对象都有与之对应的run()方法.