多线程学习第一篇
总结:查看Thread源码可以看到 下面创建的两种方式调用的是它的run方法,如果Thread 的run方法没有被覆盖,并且实现了Runnable里的方法,那么Thread执行的是Runnalbe的run方法
package com.victor.thread;
/**
* 线程学习第一篇 创建线程的方式
* 大多数习惯使用第二种方式
* 总结:查看Thread源码可以看到 下面创建的两种方式调用的是它的run方法,
* 如果Thread的run方法没有被覆盖,并且实现了Runnable里的方法,
* 那么Thread执行的是Runnalbe的run方法
* 没有传递Runnable,也就是为null,那么Thread的run方法什么也不做,
* 运行自己的run方法
* @author Victor
*/
public class LearnTraditionalThread_001 {
public static void main(String[] args) {
/**
* 1.第一种 创建一个子类重新父类的方法
*/
Thread thread = new Thread(){
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
/**
* 2.第二种
*/
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread2.start();
/**
* 抛出问题
*/
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println("Runnable:"+Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}){
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println("sub class Thread Run:"+Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}