1、线程在Java JDK中的关系如下:
public interface Runnable { public abstract void run(); }
Thread类中有
public void run() { if (target != null) { target.run(); } }
如下是T和Tread类:
public class Thread implements Runnable { .......... }
init(...);
//用匿名内部类启动线程方式1 new Thread(){ @Override public void run() { while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("线程"+Thread.currentThread().getName()+"正在运行中"); } }; }.start(); //用匿名内部类启动线程方式2 new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("线程"+Thread.currentThread().getName()+"正在运行中"); } } }).start();<span style="color:#ff0000;"> </span>
注意:一个对象首先是执行该对象的方法或操作该对象的属性,如果该对象没有才考虑父类。子类和父类有相同的方法,子类把父类的覆盖掉,只是执行子类的同名方法。
运行结果:
2、定时器的使用
(1)每隔3s运行一次
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("定时任务正在运行中"); } }, 0,3000);
(2)定时任务交替进行,根据业务逻辑具体设计
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("定时任务11111正在运行中"); new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("定时任务2222正在运行中"); } }, 0,1000); } }, 0,3000);