多线程01-线程基础
线程的两种实现方式
继承Thread类
Thread thread = new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("1:" + Thread.currentThread().getName());
System.out.println("2:" + this.getName());
}
}
};
thread.start();
实现Runnable接口
Thread thread2 = new Thread(new Runnable(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("1:" + Thread.currentThread().getName());
}
}
});
thread2.start();
要注意的是: 实现Runnable接口类实质上不是一个线程实现类 ,是在new Thead(实现Runnable接口类).start() 的时候才真正的调用线程类 Runnable接口只是覆盖了run()方法的实现.
例子
new Thread(
new Runnable(){
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("runnable :" + Thread.currentThread().getName());
}
}
}
){
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread :" + Thread.currentThread().getName());
}
}
}.start();
上面的例子最终允许的是哪个run方法呢?
分析:new Runnable(){} 是Runnable接口的匿名内部类, new Thread( new Runnable(){}) 实质上是创建了一个Thead的类对象 , new Thread( new Runnable(){}) {}则为Thead的一个
匿名内部类,覆写了run方法 那么最终调用的肯定是匿名内部类中的run方法 即: 执行
System.out.println("thread :" + Thread.currentThread().getName());
这行代码.

浙公网安备 33010602011771号