/**
* 线程start()和run()方法的理解
*
* Thread和runnable的区别
*
*/
public class TestThread {
public static void main(String[] args) {
/**
* java 7 之前声明线程
*/
Thread t=new Thread(){
@Override
public void run() {
pong();
}
};
/**
* 通过run()方法启动线程其实就是调用一个类中的方法,当做普通的方法的方式调用。并没有创建一个线程
* 程序中依旧只有一个主线程,必须等到run()方法里面的代码执行完毕,才会继续执行下面的代码。
*
* 因为t.run()实际上就是等待执行new Thread里面的run()方法调用pong()完毕后,再继续打印ping
* 其实不是真正的多线程。
*/
t.run();
/**
* 通过该方法启动线程的同事也创建了一个新的线程,真正实现了多线程。无需等待run()方法中的代码执行完毕,
* 就可以接着执行下面的代码。此时start()的这个线程处于就绪状态,当的得到CPU的时间片后就会执行其中的
* run()方法。这个run()方法中包含了要执行的这个线程的内容,run()方法运行结束,此线程就终止了。
*
* 当执行到此处,创建了一个新的线程t处于就绪状态,代码继续执行,打印出ping,此时,执行完毕。线程t得到
* CPU的时间片,开始执行,调用pong()方法打印出pong。
*/
t.start();
System.out.println("ping");
/**
* 另外学习一下java 8 声明线程的方式
*/
Thread t1=new Thread(()->pong());
/**
* 实现runnable接口所具有的优势:
* 1、避免了Java单继承的问题
* 2.适合多线程处理同一个资源
* 3、代码可以被多个线程共享,数据独立,很容易实现资源共享
* java 7 声明线程的方法
*/
Runnable runnable=new Runnable(){
@Override
public void run() {
pong();
}
};
/**
* java 8 runnable 声明线程的方法
*
*/
Runnable runnable1=()->{pong();};
}
static void pong(){
System.out.println("pong");
}
}