传统线程两种创建方式
- 第一种
new Thread(){
@Override
public void run() {
//线程执行
System.out.println(this.getName());
}
}.start();
- 第二种
new Thread(new Runnable() {
@Override
public void run() {
//线程执行
System.out.println(Thread.currentThread().getName());
}
}).start();
简单说明:
在线程中this.getName() 和Thread.currentThread().getName(),this.getName()在第一种是没有问题,但是,在第二种方式中,是不可行的,因为,this 是获取当前对象,如果在第二种方式中如果再使用this 获取线程名,this 指向的是Runnable 对象不是Thread ,所以,如果使用第二种方式创建线程,应使用Thread.currentThread().getName()获取线程名,推荐,无论使用哪种方式的线程,最好都使用Thread.currentThread().getName()方式获取线程信息。
下面实现方式那个run方法会被调用
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("is run Runnable");
}
}){
@Override
public void run() {
System.out.println("is run out Run");
}
}.start();
执行结果 :
new Thread(new Runnable() {
@Override
public void run() {
//不会执行
}
}){
@Override
public void run() {
//会执行
}
}.start();
计时器(Timer)
在实际开发中我们有时会需要周期性的执行一段代码块,如每2分钟执行一次特定代码。
实现一个简单Timer
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//执行内容
System.out.println("Time is run.....");
}
},0,200);
Timer 中的几个常用API 说明
1. public Timer(boolean isDaemon) 设置是否是守护线程
2. public void schedule(TimerTask task, long delay, long period)
第一个参数是要操作的方法
第二个参数是要设定延迟的时间
第三个参数是周期的设定,每隔多长时间执行该操作。