创建线程的三种方式:
继承 继承Thread类,覆盖run方法,启动时使用start方法
start方法,启动一个线程去执行代码
直接调用run方法,普通的方法调用,不会产生新的线程
实现Runnable接口,覆盖run 方法,创建Runnable的实例作为Thread的构造器参数传入,启动时使用线程的start方法
代码:
main函数内:有内容
public class App {
public static void main(String[] args) {
MyTreadExtends th1=new MyTreadExtends();
//继承,创建的时候,父类是自己
th1.setName("线程1extends");
Thread th2=new Thread(new MTread(),"线程2implement");
//Thread th21=new Thread(new MTread());
// 实现,创建的时候,父类是thread
// 实现:可以通过new自己的线程后加逗号,逗号后面是这个线程的名字,也可 以通过setname的方式设置线程的名字
//th2.setName("线程3implement");
//setname 以后会更改线程的名字
th2.start();
th1.start();
}
}
第一种:继承的方式
public class MyTreadExtends extends Thread{
@Override
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 35; i++) {
System.out.println(name+"-->"+i);
}
}}
第二种:实现的方式:
public class MTread implements Runnable {
@Override
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 30; i++) {
System.out.println(name+"->"+i);
}
}}
第三种方式:在main内部实现runnable,缺点:只能运行一次;
里面可以简化代码请注意:通过
new Runnable(()->{
覆盖run的方法
}),“线程的名字”);
的方式可以为只有一个方法的类节约代码:
public class App {
public static void main(String[] args) {
MyTreadExtends th1 = new MyTreadExtends();
// 继承,创建的时候,父类是自己
th1.setName("线程1extends");
Thread th2 = new Thread(new MTread(), "线程2implement");
// Thread th21=new Thread(new MTread());
// 实现,创建的时候,父类是thread
// 实现:可以通过new自己的线程后加逗号,逗号后面是这个线程的名字,也可以通过setname的方式设置线程的名字
// th2.setName("线程3implement");
// setname 以后会更改线程的名字
//这种方式是下面的创建Runnabled 简化的代码
Thread th3=new Thread(()->{
String name = Thread.currentThread().getName();
for (int i = 0; i < 35; i++) {
System.out.println(name + "-->" + i);
}
},"线程3内部") ;
// Thread th3 = new Thread(new Runnable() {
//
// @Override
// public void run() {
// String name = Thread.currentThread().getName();
//
// for (int i = 0; i < 35; i++) {
// System.out.println(name + "-->" + i);
// }
//
// }
// },"线程3内部类");
th2.start();
th1.start();
th3.start();
}
}