传统的多线程两种实现方式:前两个demo
以及利用两种方式混合的时候,注意最终运行的是哪一个线程,设计到对java基础中继承的理解。
package 多线程;
/*
* 传统线程
* @author:马巧盼
* **/
public class TraditionalThread {
public static void main(String[] args) {
/**
* 多线程的第一种实现方式
*/
Thread thread =new Thread(){
@Override
public void run(){
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("1:"+Thread.currentThread().getName());
System.out.println("2:"+this.getName());
}
}
};
thread.start();
/**
* 多线程的第二种实现方式
*/
Thread thread2 =new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("runnable:"+Thread.currentThread().getName());
}
}
});
thread2.start();
/*
* 混合方式+new Thread(){}.start();
* 因为start()先找子类的run()方法,
* 若没有找到则找父类的runnable,
* 但是现在找到了所以执行thread方法而非runnable
*/
new Thread(new Runnable() {
@Override
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();
}
}