目录
线程:
▮继承Thread类
自创一个线程类来继承Thread,并重写run()。然后new了一个自创线程类的对象。
static class MyThread extends Thread{
@Override
public void run() {
System.out.println("方法1");
}
}
public static void main(String[] args){
Thread t1 = new MyThread();
}
▮Thread的匿名类
创建一个匿名类继承Thread,并重写run()。然后new了一个匿名类的对象
public static void main1(String[] args){
Thread t2 = new Thread(){
@Override
public void run() {
System.out.println("方法2");
}
}
•匿名类
语法格式:new 父类() { ......}。这里不要误解new,new所创建的对象不是new后面,即父类的对象,new创建的对象是这个无名类的对象:{ ......}。这个无名类继承了new后面的类,也就是它的父类。也正是这种类的无名,所以这个类只能创造出一个对象。
▮实现Runnable接口
自创一个线程类,并实现接口Runnab。然后new了一个自创线程类对象。
static class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("方法3");
}
}
public static void main(String[] args){
Thread t3 = new Thread(new MyRunnable());
}
•Thread的构造方法
这里调用了Thread的另一个构造方法,这个构造方法可以接收实现了Runnab的类。
![]()
▮Runnable的匿名类
创建一个匿名类实现Runnable,并重写run()。然后new了一个匿名类的对象。
Thread t4 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("方法4");
}
});
▮lambda表达式创建
创建一个匿名类来实现接口Runnable,并重写了run()。然后new了一个匿名类的对象,相当于方法2的简化版。这种创造线程的方式,也是最为常用的创造方式。
Thread t5 = new Thread(()->{
System.out.println("方法5");
});
注意,lambda表达式中没有“public void run()”这段代码,因为这里默认就是在重写run()方法了。lanmbad的语法格式:()-> {......}。其中()就是run方法的(),用于传参;{......}就是run的{......}。所以,这段代码里才没出现 “public void run()”。
▪函数式接口
函数式接口指的是:只有一个抽象方法的接口。比如Runnable
puublic interface Runnable{
void run();
}
这样的函数式接口就可以使用lambda表达式来简化接口的实现。“()-> {......}”本身就是一个匿名类,这个匿名类自动实现接口Runnable,并且()表示的是唯一方法的参数列表(),{......}表示的是唯一方法的方法体{......}。
▮创造方法只有四种。
这五种方式中有两种方式是重复的创造方法,就是Thread和Runnable的匿名类写法,这是一种简化的写法,并不是一种新的方法。真正的创建方法就四个,我们这里的:继承Thread,实现Runnable,lambda表达式;还有一个实现Callable接口。这个后面再说,目前不谈。