Java 并发编程学习1线程的创建和定时器的使用

来源:互联网 发布:农产品进出口数据 编辑:程序博客网 时间:2024/06/03 13:04

1、线程在Java JDK中的关系如下:

publicinterface Runnable {public abstract void run();}


Thread类中有

 public void run() {        if (target != null) {            target.run();        }    }

其中target是一个runnable对象。

如下是T和Tread类:

publicclass Thread implements Runnable {.......... }

其中该T和read中都有一个各种参数的init方法进行一些参数的初始化工作。

init(...);

从中,看出我们向一个Thread构造方法中传入一个runable对象的时候,只要这个对象不为空,则执行的是这个runable对象的run方法,更加符合面向对象的思维。推荐使用。

//用匿名内部类启动线程方式1new Thread(){@Overridepublic void run() {while(true){try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程"+Thread.currentThread().getName()+"正在运行中");}};}.start();//用匿名内部类启动线程方式2new Thread(new Runnable() {@Overridepublic void run() {while(true){try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程"+Thread.currentThread().getName()+"正在运行中");}}}).start();<span style="color:#ff0000;"></span>

或者定义线程的子类复写run方法,然后定义该对象的start方法。要么实现runable接口的子类(复写子类的run方法这就是线程要做的事情的一个对象),把他作为参数传入线程的构造方法中,然后调用该线程子类对象的start方法完成使得线程处于可运行状态,等待调度。


注意:一个对象首先是执行该对象的方法或操作该对象的属性,如果该对象没有才考虑父类。子类和父类有相同的方法,子类把父类的覆盖掉,只是执行子类的同名方法。

运行结果:


2、定时器的使用

(1)每隔3s运行一次

new Timer().schedule(new TimerTask() {@Overridepublic void run() {System.out.println("定时任务正在运行中");}}, 0,3000);


(2)定时任务交替进行,根据业务逻辑具体设计

new Timer().schedule(new TimerTask() {@Overridepublic void run() {System.out.println("定时任务11111正在运行中");new Timer().schedule(new TimerTask() {@Overridepublic void run() {System.out.println("定时任务2222正在运行中");}}, 0,1000);}}, 0,3000);

运行结果:



0 0