多线程——继承 Thread类
public class MyThreadDome extends Thread {
public String threadName;
public MyThreadDome(String threadName) {
this.threadName = threadName;
}
/**
* 多线程要执行的功能都在run()方法中定义
*/
@Override
public void run() { //多线程主体类
for (int i = 0; i < 5 ; i++) {
System.out.println("线程对象"+this.threadName+ " : " + i);
}
}
}
class Test{
public static void main (String[] arge){
/**
* 多线程————继承 Thread 类 线程启动方法
*
* 实例化对象之后不能直接调用run()方法启动线程
*
* 通常通过调用线程类的 start() 方法使线程进入就绪状态,等待JVM来调度执行,JVM通过调用线程类的 run() 方法
*
* 完成实际操作, run() 方法结束后线程就会终止
*
* 而直接调用线程类的 run() 方法,并没有真正的启动线程,会被当做普通函数调用,由主函数调用 run() 是同步执行
*
* 无法达到多线程效果
*
*/
// new MyThreadDome("A").run();
new MyThreadDome("A").start();
new MyThreadDome("B").start();
new MyThreadDome("C").start();
}
}
多线程——实现 Runnable接口
public class MyRunnableDome implements Runnable {
public String threadName;
public MyRunnableDome(String threadName) {
this.threadName = threadName;
}
/**
* 多线程要执行的功能都在run()方法中定义
*/
@Override
public void run() { //多线程主体类
for (int i = 0; i < 5 ; i++) {
System.out.println("线程对象"+this.threadName+ " : " + i);
}
}
}
class Test_Two{
public static void main (String[] arge){
/**
* 多线程————实现 Runable接口 线程启动方法
*
* 由于 Java 单继承特性,通常使用实现 Runnable接口 定义线程
*
* 由于不再继承 Thread父类 所以无法继续使用 Thread父类 中的 start() 方法
*
* 打开 Thread类 源码 得Thread构造器
*
* public Thread(Runnable target) {
* init(null, target, "Thread-" + nextThreadNum(), 0);
* }
*
* Thread类 通过构造器把Runnable对象保存起来
*
* 通过Thread类构造器 可以继续使用Thread类中的 stard() 方法启动线程
*
*/
new Thread(new MyRunnableDome("A")).start();
new Thread(new MyRunnableDome("B")).start();
new Thread(new MyRunnableDome("C")).start();
}
}
多线程——利用Lambda表达式定义线程
class LambdaDome{
public static void main (String[] arge){
/**
* 从 JDK1.8 开始 Runnable接口 使用了函数式接口定义
* 所以可以直接利用 Lambda 表达式进行线程类实现
*/
for (int i = 0; i < 3; i++) {
String threadName = "线程对象_"+i+" : ";
Runnable run = ()->{
for (int j = 0; j < 5 ; j++) {
System.out.println(threadName + j);
}
};
new Thread(run).start();
}
}
}