Java 并发编程学习一线程的创建和定时器的使用
Java 并发编程学习1线程的创建和定时器的使用
其中target是一个runnable对象。
其中该T和read中都有一个各种参数的init方法进行一些参数的初始化工作。
从中,看出我们向一个Thread构造方法中传入一个runable对象的时候,只要这个对象不为空,则执行的是这个runable对象的run方法,更加符合面向对象的思维。推荐使用。
或者定义线程的子类复写run方法,然后定义该对象的start方法。要么实现runable接口的子类(复写子类的run方法这就是线程要做的事情的一个对象),把他作为参数传入线程的构造方法中,然后调用该线程子类对象的start方法完成使得线程处于可运行状态,等待调度。
运行结果:
1、线程在Java JDK中的关系如下:
public interface Runnable { public abstract void run(); }
Thread类中有
public void run() { if (target != null) { target.run(); } }
其中target是一个runnable对象。
如下是T和Tread类:
public class Thread implements Runnable { .......... }
其中该T和read中都有一个各种参数的init方法进行一些参数的初始化工作。
init(...);
从中,看出我们向一个Thread构造方法中传入一个runable对象的时候,只要这个对象不为空,则执行的是这个runable对象的run方法,更加符合面向对象的思维。推荐使用。
//用匿名内部类启动线程方式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>
或者定义线程的子类复写run方法,然后定义该对象的start方法。要么实现runable接口的子类(复写子类的run方法这就是线程要做的事情的一个对象),把他作为参数传入线程的构造方法中,然后调用该线程子类对象的start方法完成使得线程处于可运行状态,等待调度。
注意:一个对象首先是执行该对象的方法或操作该对象的属性,如果该对象没有才考虑父类。子类和父类有相同的方法,子类把父类的覆盖掉,只是执行子类的同名方法。
运行结果:
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);
运行结果: