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

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);

运行结果:



你可能感兴趣的:(java,编程,并发,线程,面向对象)